2016-12-21 8 views
5

私はちょうど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には、デスクトップ
のためにそれがどのように見える

+1

使用しているVSのバージョンは何ですか? – user657267

+0

コンパイルコマンドでC++ 11を有効にしましたか?おそらくあなたのコンパイラはC++ 03用にコンパイルされています。 –

+1

gccで失敗しません(-std = C++ 11オプション付き)。だから、それはコンパイラのバグでなければなりません。 –

答えて

3

(W4にぶつかった警告レベルを除く)にデフォルトに両方のデバッグとリリースモードでのx64のよう
すべてのコンパイラオプションをコンパイルコンパイラのバグです。 rextester.comでエラーを再現することができますが、webcompiler.cloudapp.netにコードをコンパイルすると、Visual C++コンパイラのバージョンが19.10.24807.0(x86)になります。

最新のgccclangの両方ともコードをコンパイルします。

構文自体は完全に有効です。

+0

ありがとう、Edgar。コードに問題がなかったことを知っておいてよかったです。 – Garp

関連する問題