16 #include <type_traits>
22 namespace seqan3::detail
26 template <
typename type_list_t>
27 struct type_list_expander;
50 template <
template <
typename...>
typename type_list_t,
typename... args_t>
51 struct type_list_expander<type_list_t<args_t...>>
63 template <
typename fn_t>
64 requires std::invocable<fn_t, std::type_identity<args_t>...>
65 static constexpr std::invoke_result_t<fn_t, std::type_identity<args_t>...> invoke_on_type_identities(fn_t && fn)
67 return fn(std::type_identity<args_t>{}...);
109 template <
typename type_list_t,
typename unary_predicate_t>
110 [[nodiscard]] constexpr
bool all_of(unary_predicate_t && fn)
111 requires template_specialisation_of<type_list_t, seqan3::type_list>
113 return type_list_expander<type_list_t>::invoke_on_type_identities(
114 [&](
auto &&... type_identities)
158 template <
typename type_list_t,
typename unary_function_t>
159 requires template_specialisation_of<type_list_t, seqan3::type_list>
160 constexpr
void for_each(unary_function_t && fn)
162 type_list_expander<type_list_t>::invoke_on_type_identities(
163 [&](
auto &&... type_identities)
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
Provides seqan3::type_list.
Provides algorithms for meta programming, parameter packs and seqan3::type_list.