我剛碰到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選項)。所以,它必須是一個編譯器錯誤。 –