21namespace seqan3::detail
30template <
typename tuple_t>
31concept tuple_size =
requires (tuple_t v) {
33 std::tuple_size<tuple_t>::value
34 } -> std::convertible_to<size_t>;
44template <
typename tuple_t>
46 requires (tuple_t & v, tuple_t
const & v_c) {
47 requires std::tuple_size_v<tuple_t> > 0;
49 typename std::tuple_element<0, tuple_t>::type;
53 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
60 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
63 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
65 get<0>(std::move(v_c))
66 } -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type
const &&>;
77template <detail::tuple_size tuple_t>
82 template <
size_t... Is>
85 return type_list<std::tuple_element_t<Is, tuple_t>...>{};
98template <detail::tuple_size tuple_t>
99using tuple_type_list_t =
typename tuple_type_list<tuple_t>::type;
104template <
typename... elements_t>
112template <
typename tuple_t>
113 requires requires () {
115 detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{})
118static constexpr bool all_elements_model_totally_ordered_v =
119 decltype(detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{}))::value;
180 detail::tuple_size<std::remove_reference_t<t>>
182 typename detail::tuple_type_list<std::remove_cvref_t<t>>::type;
188 requires (std::tuple_size<std::remove_reference_t<t>>::value == 0)
Provides various type traits on generic types.
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:26
Provides seqan3::pod_tuple.
Type that contains multiple types.
Definition type_list.hpp:26
Provides type traits for working with templates.
Provides seqan3::type_list.