5

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 にバンプされた警告レベルを除く)。

4

1 に答える 1

4

私にとってはコンパイラのバグのようです。rextester.comでエラーを再現できますが、webcompiler.cloudapp.netではコードが正常にコンパイルされます (Visual C++ コンパイラのバージョンは19.10.24807.0 (x86)です)。

また、最新のgccclangの両方がコードをコンパイルします。

構文自体は完全に有効です。

于 2016-12-21T07:17:01.980 に答える