我刚碰到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警告级别)
你使用什么版本的VS? – user657267
您是否在编译命令中启用了C++ 11?也许你的编译器正在编译C++ 03。 –
它不会在gcc中失败(当然是-std = C++ 11选项)。所以,它必须是一个编译器错误。 –