Странная ошибка компилятора

Я только что наткнулся на эту маленькую ошибку с msvc. Это похоже на проблему с анализом, но я не уверен.
Следующее дает мне Синтаксическая ошибка C2143: отсутствует ‘;’ до’}’

#include <vector>

struct X { };

X f(const std::vector<int> v)
{
for (auto i : v)
if (true)
return X{};     // <--

return X{};
}

int main()
{
const auto x = f(std::vector<int>{});
}

Следующие 4 варианта компилируются просто отлично.
это

X f(const std::vector<int> v)
{
for (auto i : v)
if (true)
return X();     // <--

return X{};
}

и это

X f(const std::vector<int> v)
{
for (auto i : v)
if (true) {       // <--
return X{};     // <--
}                 // <--
return X{};
}

и это

X f(const std::vector<int> v)
{
for (auto i : v) {  // <--
if (true)
return X{};     // <--
}                   // <--
return X{};
}

и это

X f(const std::vector<int> v)
{
//for (auto i : v)  // <--
if (true)
return X{};     // <--

return X{};
}

(Извините за стену глупого кода.)
Я пропускаю какое-то тайное правило или это ошибка компилятора?

Visual Studio 2015 (v140) Express Edition для настольных компьютеров
скомпилирован как x64 в режиме отладки и выпуска
все параметры компилятора по умолчанию (за исключением уровня предупреждения с W4)

5

Решение

Это похоже на ошибку компилятора для меня. Я могу воспроизвести вашу ошибку на rextester.com, но на webcompiler.cloudapp.net код компилируется нормально (версия компилятора Visual C ++ существует 19.10.24807.0 (x86)).

Также оба последних НКУ а также лязг скомпилируйте код.

Сам синтаксис совершенно корректен.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]