2016-12-21 3 views
5

Я только что столкнулся с этой небольшой ошибкой с 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 в обоих отладки и выпуска режиме
все опции компилятора по умолчанию

+1

Какую версию VS вы используете? – user657267

+0

Вы включили C++ 11 в своей команде компиляции? Возможно, ваш компилятор компилируется для C++ 03. –

+1

Это не сбой в gcc (с опцией -std = C++ 11, конечно). Таким образом, это должна быть ошибка компилятора. –

ответ

3

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

Также и последние gcc и clang скомпилируйте код.

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

+0

Спасибо, Эдгар. Хорошо знать, что проблема не в коде. – Garp

 Смежные вопросы

  • Нет связанных вопросов^_^