16 #include <type_traits> 32 template <
typename tuple_t>
34 SEQAN3_CONCEPT TupleSize = requires (tuple_t v)
36 { std::tuple_size<tuple_t>::value } -> size_t;
45 template <
typename tuple_t>
47 SEQAN3_CONCEPT TupleGet = requires (tuple_t & v, tuple_t
const & v_c)
49 requires std::tuple_size_v<tuple_t> > 0;
51 typename std::tuple_element<0, tuple_t>::type;
52 { get<0>(v) } ->
typename std::tuple_element<0, tuple_t>::type;
56 { get<0>(v_c) } ->
typename std::tuple_element<0, tuple_t>::type;
57 { get<0>(std::move(v)) } ->
typename std::tuple_element<0, tuple_t>::type;
59 { get<0>(std::move(v_c)) };
72 template <
typename state_t,
typename element_t>
73 struct models_strict_totally_ordered
88 template <detail::TupleSize tuple_t>
89 struct tuple_type_list
94 template <
size_t ... Is>
97 return type_list<std::tuple_element_t<Is, tuple_t>...>{};
110 template <detail::TupleSize tuple_t>
111 using tuple_type_list_t =
typename tuple_type_list<tuple_t>::type;
168 template <
typename t>
171 SEQAN3_CONCEPT TupleLike = detail::TupleSize<std::remove_reference_t<t>> && requires(t v)
173 typename detail::tuple_type_list<remove_cvref_t<t>>::type;
180 detail::TupleGet<remove_cvref_t<t>> &&
181 (!meta::fold<detail::tuple_type_list_t<remove_cvref_t<t>>,
183 meta::quote_trait<detail::models_strict_totally_ordered>>::value ||
Provides seqan3::type_list and auxiliary type traits.
The main SeqAn3 namespace.
Provides seqan3::pod_tuple.
Provides seqan3::type_list and auxiliary type traits.
Definition: aligned_sequence_concept.hpp:35
Provides various type traits on generic types.
Requires std::EqualityComparable and all remaing comparison operators (<, <=, >, >=).