20 namespace seqan3::detail
28 template <
typename source_type,
template <
typename...>
typename target_template>
29 struct transfer_template_args_onto
57 template <
template <
typename...>
typename source_template,
58 template <
typename...>
59 typename target_template,
60 typename... source_arg_types>
62 struct transfer_template_args_onto<source_template<source_arg_types...>, target_template>
65 using type = target_template<source_arg_types...>;
72 template <
typename source_type,
template <
typename...>
typename target_template>
73 using transfer_template_args_onto_t =
typename transfer_template_args_onto<source_type, target_template>::type;
80 template <
typename source_type,
template <
auto...>
typename target_template>
81 struct transfer_template_vargs_onto
102 template <
template <
auto...>
typename source_template,
104 typename target_template,
105 auto... source_varg_types>
107 struct transfer_template_vargs_onto<source_template<source_varg_types...>, target_template>
110 using type = target_template<source_varg_types...>;
117 template <
typename source_type,
template <
auto...>
typename target_template>
118 using transfer_template_vargs_onto_t =
typename transfer_template_vargs_onto<source_type, target_template>::type;
136 template <
typename source_t,
template <
typename...>
typename target_template>
141 template <
typename source_t,
template <
typename...>
typename target_template>
143 !std::same_as<transformation_trait_or_t<transfer_template_args_onto<source_t, target_template>,
void>,
void>)
144 struct is_type_specialisation_of<source_t, target_template> :
145 std::is_same<source_t, transfer_template_args_onto_t<source_t, target_template>>
153 template <
typename source_t,
template <
typename...>
typename target_template>
154 inline constexpr
bool is_type_specialisation_of_v = is_type_specialisation_of<source_t, target_template>::value;
161 template <
typename source_t,
template <
auto...>
typename target_template>
175 template <
typename source_t,
template <
auto...>
typename target_template>
177 !std::same_as<transformation_trait_or_t<transfer_template_vargs_onto<source_t, target_template>,
void>,
void>)
178 struct is_value_specialisation_of<source_t, target_template> :
179 std::is_same<source_t, transfer_template_vargs_onto_t<source_t, target_template>>
187 template <
typename source_t,
template <
auto...>
typename target_template>
198 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename... spec_t>
199 struct valid_template_spec_or
202 using type = fallback_t;
206 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename... spec_t>
208 struct valid_template_spec_or<fallback_t, templ_t, spec_t...>
211 using type = templ_t<spec_t...>;
221 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename... spec_t>
222 using valid_template_spec_or_t =
typename valid_template_spec_or<fallback_t, templ_t, spec_t...>::type;
243 template <
typename mytype,
template <
typename...>
typename type_template>
244 concept template_specialisation_of = is_type_specialisation_of_v<mytype, type_template>;
256 template <
typename t>
257 using strip_type_identity_t =
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
SeqAn specific customisations in the standard namespace.
constexpr bool is_value_specialisation_of_v
Helper variable template for seqan3::detail::is_value_specialisation_of (unary_type_trait shortcut).
Definition: template_inspection.hpp:188