奇怪的编译器错误

Gar*_*arp 5 c++ compiler-errors parsing-error

我刚刚用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>{});
}
Run Code Online (Sandbox Code Playgroud)

接下来的4个版本编译得很好.
这个

X f(const std::vector<int> v)
{
  for (auto i : v)
    if (true)
      return X();     // <--

  return X{};
}
Run Code Online (Sandbox Code Playgroud)

还有这个

X f(const std::vector<int> v)
{
  for (auto i : v)
    if (true) {       // <--
      return X{};     // <--
    }                 // <--
  return X{};
}
Run Code Online (Sandbox Code Playgroud)

还有这个

X f(const std::vector<int> v)
{
  for (auto i : v) {  // <--
    if (true)
      return X{};     // <--
  }                   // <--
  return X{};
}
Run Code Online (Sandbox Code Playgroud)

还有这个

X f(const std::vector<int> v)
{
  //for (auto i : v)  // <--
    if (true)
      return X{};     // <--

  return X{};
}
Run Code Online (Sandbox Code Playgroud)

(对不起愚蠢代码的墙.)
我错过了一些神秘的规则,还是这个编译器错误?

Visual Studio 2015(v140)Express Edition for Desktop
在调试和发布模式下编译为x64
所有编译器选项均为默认值(警告级别除了W4)

Edg*_*jān 4

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

最新的gccclang也都编译了代码。

语法本身是完全有效的。