如果我有一个检测专业化的特征(即模板类型):
template <typename T>
struct is_specialisation : std::false_type {
};
template <template <typename...> class U, typename... Args>
struct is_specialisation<U<Args...>> : std::true_type {
};
这按预期工作:
traits::is_specialisation<std::vector<int>>::value; // True
traits::is_specialisation<std::string_view>::value; // True
traits::is_specialisation<std::tuple<char, int, double>>::value; // True
traits::is_specialisation<float>::value; // False
除非参数包类型之一实际上是一个值:
traits::is_specialisation<std::array<char, 4>>::value; // False
这是因为template <typename...> class U
声明是专门针对types的,如果我将其切换到template <auto...> class U
它将接受所有值 - 但是有没有一种方法可以声明它可以混合使用类型和值?