根据10.1.5 [dcl.constexpr]第5段(N4659),
对于既不是默认值也不是模板的constexpr函数或constexpr构造函数,如果不存在参数值,则函数或构造函数的调用可以是核心常量表达式的计算子表达式( 8.20),或者,对于构造函数,某个对象的常量初始值设定项(6.6.2),. 程序格式错误,无需诊断。 [例如:
constexpr int f(bool b) { return b ? throw 0 : 0; } // OK constexpr int f() { return f(true); } // ill-formed, no diagnostic required ...
-end example]
我不确定为什么上述程序格式不正确。我当然可以看到f(true)
不是核心常量表达式的一部分。 但是,参数值false
存在,f(false)
是核心常量表达式的一部分。问题是什么?
答案 0 :(得分:0)
f(bool)
格式正确,f(false)
是核心常量表达式。
其f()
格式错误,所有参数值(在本例中为空集)都会导致调用f(true)
,而后者又会抛出。{/ p>