我有一个类型特征,检查给定类型是否是给定类模板的实例:
template <template <typename...> class C, typename T>
struct check_is_instance_of : std::false_type { };
template <template <typename...> class C, typename ...Ts>
struct check_is_instance_of<C, C<Ts...>> : std::true_type { };
template <template <typename...> class C, typename T>
struct is_instance_of : check_is_instance_of<C, std::remove_cv_t<T>> { };
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不适用于非类型模板参数,因为它们不会被可变参数模板参数"捕获",因此
is_instance_of<std::integral_constant, std::true_type>
Run Code Online (Sandbox Code Playgroud)
产生编译错误.有没有办法编写一个is_instance_of适用于任意数量的类型和非类型模板参数的实现?