2016-12-21 116 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