有一个众所周知的技巧,constexpr通过执行以下操作来在函数求值中导致编译时错误:
constexpr int f(int x) {
return (x != 0) ? x : throw std::logic_error("Oh no!");
}
Run Code Online (Sandbox Code Playgroud)
如果在constexpr上下文中使用该函数,则会出现编译时错误x == 0.但是,如果参数f不是constexpr,那么它将在运行时抛出异常x == 0,但由于性能原因,这可能并不总是需要.
类似于assert被保护的理论NDEBUG,是否有一种方法可以导致constexpr函数的编译时错误,但是在运行时没有做任何事情?
最后,constexprC++ 1y(C++ 14)中的宽松规则会改变什么吗?