Я только что столкнулся с этой небольшой ошибкой с msvc. Для меня это похоже на проблему синтаксического анализа, но я не уверен.
Следующие дадут мне C2143 синтаксическая ошибка: missing ';' до того '}'Weird ошибка компилятора
#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 для настольных ПК
скомпилирован как 64 в обоих отладки и выпуска режиме
все опции компилятора по умолчанию
Какую версию VS вы используете? – user657267
Вы включили C++ 11 в своей команде компиляции? Возможно, ваш компилятор компилируется для C++ 03. –
Это не сбой в gcc (с опцией -std = C++ 11, конечно). Таким образом, это должна быть ошибка компилятора. –