24namespace seqan3::detail
33template <
typename tuple_t>
34concept tuple_size =
requires (tuple_t v)
36 {std::tuple_size<tuple_t>::value} -> std::convertible_to<size_t>;
46template <
typename tuple_t>
47concept tuple_get =
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;
53 {get<0>(v)} -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
58 {get<0>(v_c)} -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
59 {get<0>(std::move(v))} -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type>;
60 {get<0>(std::move(v_c))} -> std::convertible_to<typename std::tuple_element<0, tuple_t>::type
const &&>;
71template <detail::tuple_size tuple_t>
77 template <
size_t ... Is>
80 return type_list<std::tuple_element_t<Is, tuple_t>...>{};
93template <detail::tuple_size tuple_t>
94using tuple_type_list_t =
typename tuple_type_list<tuple_t>::type;
99template <
typename ...elements_t>
107template <
typename tuple_t>
111 { detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{}) };
114static constexpr bool all_elements_model_totally_ordered_v =
115 decltype(detail::all_elements_model_totally_ordered(tuple_type_list_t<tuple_t>{}))::value;
175concept tuple_like = detail::tuple_size<std::remove_reference_t<t>> &&
requires(t v)
177 typename detail::tuple_type_list<std::remove_cvref_t<t>>::type;
183 requires (std::tuple_size<std::remove_reference_t<t>>::value == 0) ||
Provides various type traits on generic types.
The <concepts> header from C++20's standard library.
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.