特殊化 (つまり、テンプレート化された型) を検出する特性がある場合:
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
パラメータ パック タイプの 1 つが実際に値である場合を除きます。
traits::is_specialisation<std::array<char, 4>>::value; // False
これは、template <typename...> class U
宣言が特にtypes用であるためです。切り替えた場合、すべての値を受け入れるようになりますが、型と値template <auto...> class U
の混合を取ることができると宣言する方法はありますか?