25namespace di::concepts::detail {
26template<
typename T,
typename Indices>
27struct CanStructuredBindHelper;
29template<
typename T, types::
size_t index>
30concept HasMemberGet =
requires(T value) { util::forward<T>(value).template
get<index>(); };
33struct CanStructuredBindHelper<T, meta::ListV<indices...>> {
34 constexpr static bool value = (HasMemberGet<T, indices> && ...);
38concept CanStructuredBind = SameAs<T, meta::RemoveReference<T>> && TupleLike<T> &&
40 CanStructuredBindHelper<T, meta::MakeIndexSequence<meta::TupleSize<T>>>::value;
47template<di::concepts::detail::CanStructuredBind T>
52template<di::types::
size_t index, di::concepts::detail::CanStructuredBind T>
53struct tuple_element<index, T> {
Definition tag_invoke.h:45
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto value
Definition value.h:34
constexpr auto in_place_type
Definition in_place_type.h:12
std::size_t size_t
Definition size_t.h:12
constexpr struct di::vocab::EnableGenerateStructedBindingsFunction enable_generate_structed_bindings
constexpr auto get(T &&value) -> decltype(auto)
Definition get.h:8
Definition enable_generate_structed_bindings.h:46
Definition in_place_type.h:5
Definition enable_generate_structed_bindings.h:13
constexpr auto operator()(types::InPlaceType< T > x) const
Definition enable_generate_structed_bindings.h:15
di::meta::TupleElement< T, index > type
Definition enable_generate_structed_bindings.h:54
static constexpr di::types::size_t value
Definition enable_generate_structed_bindings.h:49