20 namespace seqan3::detail
38 SEQAN3_CONCEPT alphabet_tuple_base_specialisation = requires
40 requires t::seqan3_alphabet_tuple_base_specialisation;
61 using type = type_list<>;
75 requires requires {
typename t::seqan3_required_types; }
77 struct required_types<t>
80 using type =
typename t::seqan3_required_types;
87 using required_types_t =
typename required_types<t>::type;
100 struct recursive_required_types
103 using type = type_list<>;
110 template <
typename t>
114 typename t::seqan3_recursive_required_types;
117 struct recursive_required_types<t>
120 using type =
typename t::seqan3_recursive_required_types;
126 template <
typename t>
127 using recursive_required_types_t =
typename recursive_required_types<t>::type;
136 template <
typename T>
140 template <
typename type>
147 template <
typename T>
148 struct implicitly_convertible_from
151 template <
typename type>
158 template <
typename T>
162 template <
typename type>
169 template <
typename T>
170 struct weakly_equality_comparable_with_
173 template <
typename type>
180 template <
typename T>
181 struct weakly_ordered_with_
184 template <
typename type>
198 template <
typename ...alternative_types>
200 requires (detail::writable_constexpr_alphabet<alternative_types> && ...) &&
202 (
sizeof...(alternative_types) >= 2)
205 class alphabet_variant;
207 template <
typename derived_type,
208 typename ...component_types>
210 requires (detail::writable_constexpr_semialphabet<component_types> && ...) &&
213 class alphabet_tuple_base;