多变量初始化编译器支持

Multiple variable initialization compiler support

在 g++ 7.4 下,我可以像这样声明和初始化多个变量:

std::pair<T, T> foo();

int main ()
{  auto [a, b] = foo();  }

但是在 Apple clang-703 下它给了我一个错误。

我在两个编译器中都找不到关于支持此功能的任何信息。现代编译器支持它还是我不应该使用它?另外,该功能的名称是什么?

编辑: 错误是:

auto [a, b] = foo();
      ^1    ^2

1 => 使用未声明的标识符 'a'.

2 => 应为不合格 ID。

这是一个称为 structured binding 的 C++17 特性。

Clang 5 supports them; in fact it did since 4, as do many other compilers.

问题是,您使用的是 Apple Clang,它具有 。可能您的编译器太旧了,或者您没有像使用 GCC 7.4 那样启用 C++17 功能(其中 C++17 仍处于实验阶段并且 opt-in)。