59 template <
typename tuple_t>
61 concept tuple_size_concept = requires (tuple_t v)
63 { std::tuple_size<tuple_t>::value } -> size_t;
72 template <
typename tuple_t>
74 concept tuple_get_concept = requires (tuple_t & v, tuple_t
const & v_c)
76 requires std::tuple_size_v<tuple_t> > 0;
78 typename std::tuple_element<0, tuple_t>::type;
79 { get<0>(v) } ->
typename std::tuple_element<0, tuple_t>::type;
83 { get<0>(v_c) } ->
typename std::tuple_element<0, tuple_t>::type;
84 { get<0>(std::move(v)) } ->
typename std::tuple_element<0, tuple_t>::type;
86 { get<0>(std::move(v_c)) };
99 template <
typename state_t,
typename element_t>
100 struct models_strict_totally_ordered
103 using type = std::conditional_t<state_t::value && std::StrictTotallyOrdered<element_t>,
115 template <detail::tuple_size_concept tuple_t>
116 struct tuple_type_list
121 template <
size_t ... Is>
122 static constexpr
auto invoke_to_type_list(std::index_sequence<Is...>)
124 return type_list<std::tuple_element_t<Is, tuple_t>...>{};
129 using type = decltype(invoke_to_type_list(std::make_index_sequence<std::tuple_size<tuple_t>::value>{}));
137 template <detail::tuple_size_concept tuple_t>
138 using tuple_type_list_t =
typename tuple_type_list<tuple_t>::type;
195 template <
typename t>
198 concept tuple_like_concept = detail::tuple_size_concept<std::remove_reference_t<t>> && requires(t v)
200 typename detail::tuple_type_list<remove_cvref_t<t>>::type;
206 requires (std::tuple_size<std::remove_reference_t<t>>::value == 0) ||
207 detail::tuple_get_concept<remove_cvref_t<t>> &&
208 (!meta::fold<detail::tuple_type_list_t<remove_cvref_t<t>>,
210 meta::quote_trait<detail::models_strict_totally_ordered>>::value ||
Provides seqan3::type_list and auxiliary metafunctions.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:58
Contains seqan3::pod_tuple.
Provides seqan3::type_list and auxiliary metafunctions.
Definition: aligned_sequence_concept.hpp:288
Provides C++20 additions to the type_traits header.
Provides various metafunctions on generic types.
Requires std::EqualityComparable and all remaing comparison operators (<, <=, >, >=).