如果使用初始化语法,我找不到有关新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 if
,constexpr if
只是“if
constexpr
”,或者无法保证,必须明确添加到标准?
答案 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语句中声明的名称与条件中声明的名称在同一声明区域中。