为什么这个constexpr功能不正确?

时间:2017-07-11 05:05:17

标签: c++ c++11 language-lawyer

根据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)是核心常量表达式的一部分。问题是什么?

1 个答案:

答案 0 :(得分:0)

f(bool)格式正确,f(false)是核心常量表达式。

f()格式错误,所有参数值(在本例中为空集)都会导致调用f(true),而后者又会抛出。{/ p>