由于几个原因,您具体做的事情是不可能的。
首先,static_assert
要求它的参数是编译时常量表达式。value_
肯定不是。
您可以尝试通过标记它使其成为常量表达式constexpr
。但是 C++11 不允许constexpr
非静态数据成员。即使它这样做了,那也无济于事,因为value_
它是一个非静态成员。因此,它还不存在。它仅在存在实际的类实例时才存在,即具有this
指针的东西。您的static_assert
表达式不会创建这些对象之一,因此无法访问它。
因此,为了使这个“工作”(在“工作”做一些有意义的事情的范围内),你必须:
- 给出
A
一个constexpr
构造函数,以便您可以创建它的constexpr
实例化。
- 您
static_assert
必须使用构造函数实际创建一个类型constexpr
并访问有问题的数据成员。
现在,如果你这样做,你会发现它并没有给你你想要的东西(基于这个陈述,因为你的问题没有解释你到底想要完成什么):
其次,每次我的意思是每次创建此类的对象时,因为 X 是模板参数,所以它是一个常量表达式。
注意static_assert
是静态的。而“每次创建此类的对象”都是运行时事件。您不能对运行时发生的事情执行静态测试。
你要的是正规 assert
的,不是static_assert
。