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

时间:2014-03-04 17:30:50

标签: templates c++11 partial-specialization

如果class A的模板具有特定的模板class NOTALLOWED,如何抛出 static_assert

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应保持原样。 我想阻止A将结构NOTALLOWED作为模板参数

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以为特定模板编写is_instantiation个特征:

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

template <typename... Args>
struct is_notallowed_instantiation<NOTALLOWED<Args...>> { constexpr bool value = true; };

然后你可以static_assert就可以了。

答案 1 :(得分:0)

专注于特殊模板:

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!")
}