クラスが通常型であるかテンプレート型(メタ型)であるかを検出する方法はありますかこれには非型パラメータが含まれていますか?それは非種類やタイプを混在テンプレートに失敗しますがタイプと非タイプを混在させる任意のテンプレートクラスを検出する方法はありますか?
template<class, int> struct MixedFoo{};
のように私は1つを除いて、いずれかの解決策を考え出すことができませんよ、
#include <iostream>
template <template<class...> class>
constexpr bool is_template()
{
return true;
}
template <class>
constexpr bool is_template()
{
return false;
}
struct Foo{};
template<class> struct TemplateFoo{};
template<class, int> struct MixedFoo{};
int main()
{
std::cout << std::boolalpha;
std::cout << is_template<Foo>() << std::endl;
std::cout << is_template<TemplateFoo>() << std::endl;
// std::cout << is_template<MixedFoo>() << std::endl; // fails here
}
:私はこの解決策を考え出しました私は明示的に過負荷の種類を指定する必要があります。もちろん、これはコンビナトリアルな爆発のために妥当ではありません。
関連質問(ないデュープ):Is it possible to check for existence of member templates just by an identifier?
悲しいことに[C++ 17でもない](http://melpon.org/wandbox/permlink/VAUXmYQ6tM5L2GOh)は、必要な組み合わせの数を減らすようです。 –