在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。
答案 0 :(得分:1)
这是一种称为 structured binding 的C ++ 17功能。
Clang 5 supports them;实际上是it did since 4, as do many other compilers。
问题是,您正在使用具有different version numbers的Apple Clang。可能是您的编译器太旧了,或者您没有像使用GCC 7.4一样启用C ++ 17功能(在该版本中C ++ 17仍处于试验和选择启用状态)。