Sev*_*eux 6 c++ visual-c++ language-lawyer c++17 structured-bindings
我正在使用Windows 10,Visual Studio 2017 v15.7.1 /std:c++latest /permissive-
这个带结构化绑定的简单代码将无法编译:
auto [a, b] = func1(x, y, z); // auto func1() -> std::tuple<double, double, double>
[a, b] = func2(x, y, z); // same signature as func2
Run Code Online (Sandbox Code Playgroud)
说E1277 attributes are not allowed here.
下面的代码也不会编译,同样的错误
double a, b;
[a, b] = func1(x, y, z);
[a, b] = func2(x, y, z);
Run Code Online (Sandbox Code Playgroud)
码
auto [a, b] = func1(x, y, z);
auto [a, b] = func2(x, y, z);
Run Code Online (Sandbox Code Playgroud)
也不会编译,理所当然地抱怨重新定义.
它编译的唯一方法是
auto [a1, b1] = func1(x, y, z);
auto [a2, b2] = func2(x, y, z);
Run Code Online (Sandbox Code Playgroud)
坦率地说,这很丑陋.
这个功能是这样设计的吗?还是VC++ bug?
结构化绑定必须具有auto.从cppreference:
Run Code Online (Sandbox Code Playgroud)attr(optional) cv-auto ref-operator(optional) [ identifier-list ] = expression ;...
cv-auto- 可能是cv限定的类型说明符auto
......
变体省略; 只是改变了= expression部分
我们可以看到这cv-auto是强制性的.
如果你想重新绑定a与b使用std::tie:
auto [a, b] = func1(x, y, z);
std::tie(a, b) = func2(x, y, z);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
357 次 |
| 最近记录: |