Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //template<typename, typename T, typename... Args>
- //struct is_constructible_impl : std::false_type { };
- //
- //template<typename T, typename... Args>
- //struct is_constructible_impl<decltype(T(std::declval<Args>()...), void()), T, Args...> : std::true_type { };
- //
- //template<typename T, typename... Args>
- //struct is_constructible : is_constructible_impl<void, T, Args...> { };
- //
- //template<typename T, typename... Args>
- //constexpr bool is_constructible_v = is_constructible<T, Args...>::value;
- //
- //template<template<typename...> typename T, typename... Args>
- //struct bar { };
- //
- //template<typename T, template<typename...> typename U>
- //struct is_specialization_of : std::false_type { };
- //
- //template<template<typename...> typename T, typename... Args>
- //struct is_specialization_of<T<Args...>, T> : std::true_type { };
- //
- //template<typename T, template<typename...> typename U>
- //constexpr bool is_specialization_of_v = is_specialization_of<T, U>::value;
- //template<typename T, template<typename...> typename U>
- //struct transfer_arguments { };
- //
- //template<template<typename...> typename T, template<typename...> typename U, typename... Args>
- //struct transfer_arguments<T<Args...>, U>
- //{
- // using type = U<Args...>;
- //};
- //
- //template<typename T, template<typename...> typename U>
- //using transfer_arguments_t = typename transfer_arguments<T, U>::type;
- //template<typename T, typename = void>
- //struct is_class_impl : std::false_type { };
- //
- //template<typename T>
- //struct is_class_impl<T, std::enable_if_t<!std::is_union_v<T>, std::void_t<char T::*>>> : std::true_type { };
- //
- //template<typename T>
- //struct is_class : is_class_impl<T> { };
- //
- //template<typename T>
- //constexpr bool is_class_v = is_class<T>::value;
- //
- template<typename, typename F, typename... Args>
- struct is_invokeable_impl : std::false_type { };
- template<typename F, typename... Args>
- struct is_invokeable_impl<decltype(std::declval<F>()(std::declval<Args>()...), void()), F, Args...> : std::true_type { };
- template<typename F, typename... Args>
- struct is_invokeable : is_invokeable_impl<void, F, Args...> { };
- template<typename F, typename... Args>
- constexpr bool is_invokeable_v = is_invokeable<F, Args...>::value;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement