我刚刚用msvc碰到了这个小错误。对我来说这看起来像是一个解析问题,但我不确定 以下为我提供了 C2143语法错误:缺少&#39 ;;'之前'}'
#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 在调试和释放模式下编译为x64 所有编译器选项都是默认值(警告级别除了W4)
答案 0 :(得分:3)
对我来说,它看起来像编译错误。我可以在rextester.com上重现您的错误,但在webcompiler.cloudapp.net上,代码编译得很好(Visual C ++编译器版本有 19.10.24807.0(x86))。
语法本身完全有效。