27 template<
class first_t,
class second_t,
class... rest_t>
33 template<
class first_t,
class... rest_ty>
38 template<
class... args_t>
45 template<
class T,
class... args_t>
48 static constexpr
bool value = std::conjunction_v<std::is_same<T, args_t>...>;
51 template<
class T,
class... args_t>
58 template<
class T,
class =
void>
67 using type =
typename T::value_type;
74 using type = std::remove_pointer_t<T>;
87 template<
class T, std::
size_t = sizeof(T)>
88 std::true_type is_specialization_exist_impl(T*);
90 std::false_type is_specialization_exist_impl(...);
96 using is_specialization_exist = decltype(details::is_specialization_exist_impl(std::declval<T*>()));
99 constexpr
bool is_specialization_exist_v = is_specialization_exist<T>::value;
105 template<
class test_t,
template<
class...>
class reference_t>
110 template<
template<
class...>
class reference_t,
class... args_t>
142 template<
class... args_t>
145 using args_t::operator()...;
148 template<
class... args_t>