怪异的编译器错误



我只是用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除外)

对我来说,它看起来像是编译器错误。我可以在rextester.com上重现您的错误,但是在webcompiler.cloudapp.net上编译了代码(Visual C 编译器版本,有 19.10.24807.0(x86))。)。

也最新的GCC和Clang编译了代码。

语法本身是完全有效的。

相关内容

  • 没有找到相关文章

最新更新