我想建立一个可以选择constexpr-ness的课程。当然,我想利用编译时错误检查。
当给定参数不是常量表达式时,每个constexpr
函数(包含的构造函数)也必须在运行时工作。这应该是每次在函数参数的static_assert
函数中使用constexpr
时无法编译的原因。
这样说,我已经读过,可以使用抛出mechnanism的异常,因为当函数被调用为常量表达式时,可以在编译时评估这些异常。如果可行,那么问题就解决了。
但构造函数仍然没有解决问题,因为constexpr
构造函数似乎必须没有正文......所以看起来我不能使用异常抛出!
有什么想法吗?
答案 0 :(得分:7)
以下可能会有所帮助:
class A
{
public:
constexpr A(int i) : i(i != 42 ? throw 42 : i) {}
private:
int i;
};
int main(int argc, char *argv[])
{
constexpr A a1(42);
//constexpr A a2(41); // Compile error as expected.
return 0;
}