Структурированные привязки на основе диапазона с вектором

Я пытаюсь перебрать вектор кортежей:

std::vector<std::tuple<int, int, int>> tupleList;

Используя диапазон для цикла со структурированными привязками:

for (auto&& [x, y, z] : tupleList) {}

Но Visual Studio 2017 15.3.5 выдает ошибку:

не может вывести тип 'auto' (требуется инициализатор)

Но следующее работает:

for (auto&& i : tupleList) {
    auto [x, y, z] = i;
}

Это почему?

1 ответ

Решение

Это работает, но intellisense не использует тот же компилятор:

Так что даже с красными линиями и ошибками, показанными в редакторе, он компилируется с ISO C++17 Standard (/std:c++17) переключатель.

Я скомпилировал следующую программу:

#include <vector>
#include <tuple>

std::vector<std::tuple<int, int, int>> tupleList;
//By using a range based for loop with structured bindings :

int main()
{
    for(auto&&[x, y, z] : tupleList) {}
}

Версия Visual Studio:

Microsoft Visual Studio Community 2017 Preview (2) Версия 15.4.0 Preview 3.0 VisualStudio.15.Preview/15.4.0-pre.3.0+26923.0

версия cl:

19.11.25547.0

Из командной строки:

>cl test.cpp /std:c++17
Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

test.cpp
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC\14.11.25503\include\cstddef(31): warning C4577: 'noexcept' used with no exception handling mode specified; termination on exception is not guaranteed. Specify /EHsc
Microsoft (R) Incremental Linker Version 14.11.25547.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:test.exe
test.obj
Другие вопросы по тегам