Templates 如果模板参数属于某个模板类,则静态断言

Templates 如果模板参数属于某个模板类,则静态断言,templates,c++11,partial-specialization,Templates,C++11,Partial Specialization,如果类a的模板属于某个不允许的模板化类,我如何抛出静态断言 template<typename T> struct NOTALLOWED{ }; template<typename T> struct A{ // static_assert if T == NOTALLOWED<...> ?? } // USING A< NOTALLOWED<int> > is not allowed for example 模

如果
类a
的模板属于某个不允许的模板化
类,我如何抛出静态断言

template<typename T>
struct NOTALLOWED{

};

template<typename T>
struct A{
    // static_assert  if T == NOTALLOWED<...>  ??
}


// USING A< NOTALLOWED<int> >  is not allowed for example
模板
结构不允许{
};
模板
结构A{
//如果T==不允许,则静态断言??
}
//例如,不允许使用
模板类A应保持给定状态。 我想防止
A
将不允许的结构
作为模板参数


非常感谢

您可以为特定模板编写
is\u实例化
traits:

template <typename T>
struct is_notallowed_instantiation { constexpr bool value = false; };

template <typename... Args>
struct is_notallowed_instantiation<NOTALLOWED<Args...>> { constexpr bool value = true; };
模板
结构不允许实例化{constexpr bool value=false;};
模板
结构不允许实例化{constexpr bool value=true;};

然后,您可以对该模板进行静态断言。

专门化特殊模板:

template<typename T>
struct NOTALLOWED{

};

template<typename T>
struct A{
    // normal code
}

template<typename T>
struct A< NOTALLOWED<T> >{
    std::static_assert( sizeof(NOTALLOWED<T>) == -1, "This is not allowed!")
}
模板
结构不允许{
};
模板
结构A{
//正常代码
}
模板
结构A{
std::static_断言(sizeof(NOTALLOWED)=-1,“这是不允许的!”)
}