42 #include <meta/meta.hpp> 56 template <
typename source_type,
template <
typename ...>
typename target_template>
57 struct transfer_template_args_onto
86 template <
template <
typename ...>
typename source_template,
87 template <
typename ...>
typename target_template,
88 typename ... source_arg_types>
92 std::declval<target_template<source_arg_types...>>();
95 struct transfer_template_args_onto<source_template<source_arg_types...>, target_template>
98 using type = target_template<source_arg_types...>;
105 template <
typename source_type,
template <
typename ...>
typename target_template>
106 using transfer_template_args_onto_t =
typename transfer_template_args_onto<source_type, target_template>::type;
113 template <
typename source_type,
template <
auto ...>
typename target_template>
114 struct transfer_template_vargs_onto
135 template <
template <
auto ...>
typename source_template,
136 template <
auto ...>
typename target_template,
137 auto ... source_varg_types>
141 std::declval<target_template<source_varg_types...>>();
144 struct transfer_template_vargs_onto<source_template<source_varg_types...>, target_template>
147 using type = target_template<source_varg_types...>;
154 template <
typename source_type,
template <
auto ...>
typename target_template>
155 using transfer_template_vargs_onto_t =
typename transfer_template_vargs_onto<source_type, target_template>::type;
174 template <
typename source_t,
template <
typename ...>
typename target_template>
175 struct is_type_specialisation_of :
public std::false_type
178 template <
typename source_t,
template <
typename ...>
typename target_template>
183 struct is_type_specialisation_of<source_t, target_template> :
184 std::is_same<source_t, transfer_template_args_onto_t<source_t, target_template>>
192 template <
typename source_t,
template <
typename ...>
typename target_template>
193 inline constexpr
bool is_type_specialisation_of_v = is_type_specialisation_of<source_t, target_template>::value;
200 template <
typename source_t,
template <
auto ...>
typename target_template>
201 struct is_value_specialisation_of : std::false_type
213 template <
typename source_t,
template <
auto ...>
typename target_template>
218 struct is_value_specialisation_of<source_t, target_template> :
219 std::is_same<source_t, transfer_template_vargs_onto_t<source_t, target_template>>
227 template <
typename source_t,
template <
auto ...>
typename target_template>
228 inline constexpr
bool is_value_specialisation_of_v = is_value_specialisation_of<source_t, target_template>::value;
The concept std::Same<T, U> is satisfied if and only if T and U denote the same type.
Definition: aligned_sequence_concept.hpp:288