奇怪的编译器错误
Weird compiler error
我刚刚在使用 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 除外)
对我来说这看起来像是一个编译器错误。我可以在 rextester.com, but on webcompiler.cloudapp.net 上重现你的错误,代码编译得很好(Visual C++ 编译器版本有 19.10.24807.0 (x86))。
语法本身完全有效。
我刚刚在使用 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 除外)
对我来说这看起来像是一个编译器错误。我可以在 rextester.com, but on webcompiler.cloudapp.net 上重现你的错误,代码编译得很好(Visual C++ 编译器版本有 19.10.24807.0 (x86))。
语法本身完全有效。