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
は、デバッグ モードとリリース モードの両方で x64 としてコンパイルされ、
すべてのコンパイラ オプションがデフォルトに設定されます (W4 にバンプされた警告レベルを除く)。