Являются ли структурированные привязки многоразовыми? - PullRequest
0 голосов
/ 14 мая 2018

Я использую 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

, говоря E1277 attributes are not allowed here.

Код ниже также не скомпилируется, та же ошибка

double a, b;
[a, b] = func1(x, y, z);
[a, b] = func2(x, y, z);

Код

auto [a, b] = func1(x, y, z);
auto [a, b] = func2(x, y, z);

также не скомпилируется, справедливо жаловавшись на переопределение.

Единственный способ компиляции - это

auto [a1, b1] = func1(x, y, z);
auto [a2, b2] = func2(x, y, z);

, что, откровенно говоря, ужасно.

Эта функция разработана таким образом?Или это ошибка VC ++?

1 Ответ

0 голосов
/ 14 мая 2018

Структурированные привязки должны иметь auto.От cppreference :

attr(optional) cv-auto ref-operator(optional) [ identifier-list ] = expression ;

...
cv-auto - возможно, спецификатор типа cv auto
...

варианты опущены;просто измените = expression part

Мы видим, что cv-auto является обязательным.


Если вы хотите выполнить повторную привязку a и b, используйтеstd::tie:

auto [a, b] = func1(x, y, z);
std::tie(a, b) = func2(x, y, z);
...