C++ if语句中的结构化绑定初始值设定项未编译
阅读C++17,现在可以在if语句中进行多次初始化:C++ if语句中的结构化绑定初始值设定项未编译,c++,c++17,structured-bindings,C++,C++17,Structured Bindings,阅读C++17,现在可以在if语句中进行多次初始化: if (int x = func(), y = func2(); x > 0 && y > 0) { } 很好的一个,还与C++17中的另一个功能结合在一起,结构化绑定: if (auto[iter, success] = set.insert("Hello"); success) { } else { } 但结合这两种功能不会在VisualStudio 2017中编译 if (auto[ite
if (int x = func(), y = func2(); x > 0 && y > 0)
{
}
很好的一个,还与C++17中的另一个功能结合在一起,结构化绑定:
if (auto[iter, success] = set.insert("Hello"); success)
{ }
else
{ }
但结合这两种功能不会在VisualStudio 2017中编译
if (auto[iter, success] = set.insert("Hello"), [iter2, success2] = set.insert("Foo"); success && success2)
{}
else
{}
缺少“;”在“,”之前
这是VS2017中的一个bug还是不可能?MSVC在这个问题上是对的。这仅限于语法:
selection-statement:
if ( init-statement condition )
init-statement:
simple-declaration
simple-declaration:
decl-specifier-seq init-declarator-list;
decl-specifier-seq ref-qualifier [ identifier-list ] initializer ;
上面从整个标准中对其进行了总结(为了简洁起见,删除了一些可选内容),但起点是
问题的关键在于,简单声明
要么是一个逗号分隔的声明器列表,它引入相同类型的对象1(decl说明符seq init declarator list;
)要么是一个单一的结构化绑定(在简单声明
下的第二行相当冗长)
1不是严格意义上的同一类型(
intx,*y;
),但这一点应该很清楚。
auto[iter,success,iter2,success2]=std::tuple_cat(set.insert(“Hello”),set.insert(“Foo”)
严格来说,这与新的if
初始值设定项声明无关。这在之外也不起作用。auto
与auto