Поддержка компилятора множественной инициализации - PullRequest
2 голосов
/ 24 мая 2019

В g ++ 7.4 я мог бы объявить и инициализировать несколько переменных следующим образом:

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

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

Однако под Apple clang-703 выдает ошибку.

Я не смог найти никакой информации о поддержке этой функции в обоих компиляторах. Поддерживается ли он современными компиляторами или мне не следует его использовать? И как называется эта функция?

Edit: Ошибка:

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

1 => использование необъявленного идентификатора 'a'.

2 => ожидаемый безусловный идентификатор.

1 Ответ

1 голос
/ 24 мая 2019

Это особенность C ++ 17, называемая структурированным связыванием .

Clang 5 поддерживает их ; фактически это было с 4 года, как и многие другие компиляторы .

Проблема в том, что вы используете Apple Clang с различными номерами версий . Возможно, ваш компилятор слишком стар, или вы не включили функциональность C ++ 17 так, как вы это делали с GCC 7.4 (в котором C ++ 17 все еще был экспериментальным и не включен).

...