2016-12-21 135 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),易捷版桌面
編譯爲調試和發佈模式的x64
所有編譯器選項爲默認值(除被撞W4警告級別)

+1

你使用什麼版本的VS? – user657267

+0

您是否在編譯命令中啓用了C++ 11?也許你的編譯器正在編譯C++ 03。 –

+1

它不會在gcc中失敗(當然是-std = C++ 11選項)。所以,它必須是一個編譯器錯誤。 –

回答

3

它看起來像一個編譯器錯誤對我來說。我可以重現上rextester.com你的錯誤,但webcompiler.cloudapp.net代碼編譯罰款(Visual C++編譯版本有19.10.24807.0(86))。

還兼具最新gccclang編譯代碼。

語法本身是完全有效的。

+0

謝謝埃德加。很高興知道問題不在代碼中。 – Garp