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 ...>
typename target_template,
59 typename ...source_arg_types>
63 typename target_template<source_arg_types...>;
66 struct transfer_template_args_onto<source_template<source_arg_types...>, target_template>
69 using type = target_template<source_arg_types...>;
76 template <
typename source_type,
template <
typename ...>
typename target_template>
77 using transfer_template_args_onto_t =
typename transfer_template_args_onto<source_type, target_template>::type;
84 template <
typename source_type,
template <
auto ...>
typename target_template>
85 struct transfer_template_vargs_onto
106 template <
template <
auto ...>
typename source_template,
107 template <
auto ...>
typename target_template,
108 auto ... source_varg_types>
112 typename target_template<source_varg_types...>;
115 struct transfer_template_vargs_onto<source_template<source_varg_types...>, target_template>
118 using type = target_template<source_varg_types...>;
125 template <
typename source_type,
template <
auto ...>
typename target_template>
126 using transfer_template_vargs_onto_t =
typename transfer_template_vargs_onto<source_type, target_template>::type;
144 template <
typename source_t,
template <
typename ...>
typename target_template>
145 struct is_type_specialisation_of :
public std::false_type
149 template <
typename source_t,
template <
typename ...>
typename target_template>
151 requires (!std::same_as<transformation_trait_or_t<transfer_template_args_onto<source_t, target_template>,
void>,
154 struct is_type_specialisation_of<source_t, target_template> :
155 std::is_same<source_t, transfer_template_args_onto_t<source_t, target_template>>
163 template <
typename source_t,
template <
typename ...>
typename target_template>
164 inline constexpr
bool is_type_specialisation_of_v = is_type_specialisation_of<source_t, target_template>::value;
171 template <
typename source_t,
template <
auto ...>
typename target_template>
172 struct is_value_specialisation_of : std::false_type
185 template <
typename source_t,
template <
auto ...>
typename target_template>
187 requires (!std::same_as<transformation_trait_or_t<transfer_template_vargs_onto<source_t, target_template>,
void>,
190 struct is_value_specialisation_of<source_t, target_template> :
191 std::is_same<source_t, transfer_template_vargs_onto_t<source_t, target_template>>
199 template <
typename source_t,
template <
auto ...>
typename target_template>
211 template <
typename fallback_t,
template <
typename ...>
typename templ_t,
typename ...spec_t>
212 struct valid_template_spec_or
215 using type = fallback_t;
219 template <
typename fallback_t,
template <
typename ...>
typename templ_t,
typename ...spec_t>
221 requires requires {
typename templ_t<spec_t...>; }
223 struct valid_template_spec_or<fallback_t, templ_t, spec_t...>
226 using type = templ_t<spec_t...>;
236 template <
typename fallback_t,
template <
typename ...>
typename templ_t,
typename ...spec_t>
237 using valid_template_spec_or_t =
typename valid_template_spec_or<fallback_t, templ_t, spec_t...>::type;
259 template <
typename mytype,
template <
typename ...>
typename type_template>
260 SEQAN3_CONCEPT template_specialisation_of = is_type_specialisation_of_v<mytype, type_template>;
271 template <
typename t>
272 using strip_type_identity_t = std::conditional_t<is_type_specialisation_of_v<t, std::type_identity>,
273 transformation_trait_or_t<t, void>,
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:200
SeqAn specific customisations in the standard namespace.
Definition: affine_cell_proxy.hpp:438