23 template<
class first_t,
class second_t,
class... rest_t>
24 struct are_same<first_t, second_t, rest_t...> : std::false_type
29 template<
class first_t,
class... rest_ty>
34 template<
class... args_t>
35 constexpr
bool are_same_v =
are_same<args_t...>::value;
41 template<
class T,
class... args_t>
42 static constexpr
bool are_specific_v = std::conjunction_v<std::is_same<T, args_t>...>;
49 template<
class T,
class =
void>
58 using type =
typename T::value_type;
65 using type = std::remove_pointer_t<T>;
78 template<
class T, std::
size_t = sizeof(T)>
79 std::true_type is_specialization_exist_impl(T*);
81 std::false_type is_specialization_exist_impl(...);
87 using is_specialization_exist = decltype(details::is_specialization_exist_impl(std::declval<T*>()));
90 constexpr
bool is_specialization_exist_v = is_specialization_exist<T>::value;
96 template<
class test_t,
template<
class...>
class reference_t>
101 template<
template<
class...>
class reference_t,
class... args_t>
133 template<
class... args_t>
136 using args_t::operator()...;
139 template<
class... args_t>