constexpr是否有标准保证的初始化程序? 'constexpr(constexpr auto x = f(); x){}'

时间:2016-07-29 09:32:08

标签: c++ clang constexpr c++17

如果使用初始化语法,我找不到有关新C ++ 17的任何信息 并且'constexpr if'in:

http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/p0128r1.html

然而,语法由 Clang-HEAD ...

支持
constexpr auto f() { return true; }
int main() {
    if constexpr(constexpr auto x = f(); x) { }
}

在线代码 - > http://melpon.org/wandbox/permlink/dj3a9ChvjhlNc8nr

标准保证初始值设定项为constexpr ifconstexpr if只是“if constexpr”,或者无法保证,必须明确添加到标准?

1 个答案:

答案 0 :(得分:7)

Selection statements with initializer提案提到了if constexpr,并声明“if constexpr的工具与此提案中的if声明一致”。

N4606 [stmt.if] p3中有if语句与初始值设定项的规范明确允许使用if constexpr

以下是N4606 [stmt.if] p3所说的内容:

  

表格的if语句

if constexpr[opt] ( init-statement condition ) statement
     

相当于

{
  init-statement
  if constexpr[opt] ( condition ) statement
}
     

和表格的if语句

if constexpr[opt] ( init-statement condition ) statement else statement
     

相当于

{
  init-statement
  if constexpr[opt] ( condition ) statement else statement
}
     

除了在init语句中声明的名称与条件中声明的名称在同一声明区域中。