17 #include <type_traits>
24 namespace seqan3::detail
33 template <
typename tuple_t>
34 concept tuple_size =
requires (tuple_t v) {
36 std::tuple_size<tuple_t>::value
37 } -> std::convertible_to<size_t>;
47 template <
typename tuple_t>
49 requires (tuple_t & v, tuple_t
const & v_c) {
50 requires std::tuple_size_v<tuple_t> > 0;
52 typename std::tuple_element<0, tuple_t>::type;
56 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
63 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
66 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
68 get<0>(std::move(v_c))
69 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type
const &&>;
80 template <detail::tuple_size tuple_t>
81 struct tuple_type_list
85 template <
size_t... Is>
88 return type_list<std::tuple_element_t<Is, tuple_t>...>{};
101 template <detail::tuple_size tuple_t>
102 using tuple_type_list_t =
typename tuple_type_list<tuple_t>::type;
107 template <
typename... elements_t>
115 template <
typename tuple_t>
118 detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{})
121 static constexpr
bool all_elements_model_totally_ordered_v =
122 decltype(detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{}))::value;
181 template <
typename t>
183 detail::tuple_size<std::remove_reference_t<t>>
185 typename detail::tuple_type_list<std::remove_cvref_t<t>>::type;
192 || (detail::tuple_get<std::remove_cvref_t<t>>
193 && (!detail::all_elements_model_totally_ordered_v<std::remove_cvref_t<t>>
194 || std::totally_ordered<std::remove_cvref_t<t>>));
209 template <
typename t>
Provides various type traits on generic types.
The <concepts> header from C++20's standard library.
requires requires
The rank_type of the semi-alphabet; defined as the return type of seqan3::to_rank....
Definition: alphabet/concept.hpp:164
Whether a type behaves like a tuple with exactly two elements.
Whether a type behaves like a tuple.
The main SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
Provides seqan3::pod_tuple.
Type that contains multiple types.
Definition: type_list.hpp:29
Provides type traits for working with templates.
Provides seqan3::type_list.