15 #include <meta/meta.hpp> 29 template <
typename source_type,
template <
typename ...>
typename target_template>
30 struct transfer_template_args_onto
58 template <
template <
typename ...>
typename source_template,
59 template <
typename ...>
typename target_template,
60 typename ... source_arg_types>
67 struct transfer_template_args_onto<source_template<source_arg_types...>, target_template>
70 using type = target_template<source_arg_types...>;
77 template <
typename source_type,
template <
typename ...>
typename target_template>
78 using transfer_template_args_onto_t =
typename transfer_template_args_onto<source_type, target_template>::type;
85 template <
typename source_type,
template <
auto ...>
typename target_template>
86 struct transfer_template_vargs_onto
107 template <
template <
auto ...>
typename source_template,
108 template <
auto ...>
typename target_template,
109 auto ... source_varg_types>
116 struct transfer_template_vargs_onto<source_template<source_varg_types...>, target_template>
119 using type = target_template<source_varg_types...>;
126 template <
typename source_type,
template <
auto ...>
typename target_template>
127 using transfer_template_vargs_onto_t =
typename transfer_template_vargs_onto<source_type, target_template>::type;
145 template <
typename source_t,
template <
typename ...>
typename target_template>
150 template <
typename source_t,
template <
typename ...>
typename target_template>
155 struct is_type_specialisation_of<source_t, target_template> :
156 std::is_same<source_t, transfer_template_args_onto_t<source_t, target_template>>
164 template <
typename source_t,
template <
typename ...>
typename target_template>
165 inline constexpr
bool is_type_specialisation_of_v = is_type_specialisation_of<source_t, target_template>::value;
172 template <
typename source_t,
template <
auto ...>
typename target_template>
186 template <
typename source_t,
template <
auto ...>
typename target_template>
191 struct is_value_specialisation_of<source_t, target_template> :
192 std::is_same<source_t, transfer_template_vargs_onto_t<source_t, target_template>>
200 template <
typename source_t,
template <
auto ...>
typename target_template>
212 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename ...spec_t>
213 struct valid_template_spec_or
216 using type = fallback_t;
220 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename ...spec_t>
222 requires requires {
typename templ_t<spec_t...>; }
224 struct valid_template_spec_or<fallback_t, templ_t, spec_t...>
227 using type = templ_t<spec_t...>;
237 template <
typename fallback_t,
template <
typename...>
typename templ_t,
typename ...spec_t>
238 using valid_template_spec_or_t =
typename valid_template_spec_or<fallback_t, templ_t, spec_t...>::type;
constexpr bool is_value_specialisation_of_v
Helper variable template for seqan3::detail::is_value_specialisation_of (UnaryTypeTrait shortcut)...
Definition: template_inspection.hpp:201
Definition: aligned_sequence_concept.hpp:35
The concept std::Same<T, U> is satisfied if and only if T and U denote the same type.