C++ 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

阅读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[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