【发布时间】:2017-05-03 13:53:36
【问题描述】:
static_assert 功能有问题。当我直接实例化一个类模板时,一切都按预期工作。但是当我将它作为不同类模板的参数传递时,static_assert 不起作用。
template <int X>
class A{
static_assert(X == 0, "X != 0");
};
template <class T>
class B{
};
B<A<1>> b; // Static assert does not work
A<1> a; // error: static assertion failed: X != 0
编辑
感谢大家的回答。有没有办法在不创建 A 实例/从 A 继承的情况下显式实例化 A?我正在尝试这个:
template <int X>
class A{
static_assert(X == 0, "X != 0");
};
template <class T>
class B;
template <template <int X> class T, int X>
class B<T<X>>{
template class T<X>;
};
但这是不正确的。
【问题讨论】:
-
B<T>从不实例化T。静态断言仅在模板特化被实例化时触发。 -
@KerrekSB: ↓↓↓↓↓↓↓
标签: c++ c++11 templates static-assert