私はちょうど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)Express Editionには、デスクトップ
のためにそれがどのように見える
使用しているVSのバージョンは何ですか? – user657267
コンパイルコマンドでC++ 11を有効にしましたか?おそらくあなたのコンパイラはC++ 03用にコンパイルされています。 –
gccで失敗しません(-std = C++ 11オプション付き)。だから、それはコンパイラのバグでなければなりません。 –