VS2013上同时使用基于范围的for循环和do while循环时出现编译错误

Compile error on VS2013 when range-based for loop and do while loop are used simultaneously

本文关键字:循环 do for while 错误 编译 范围 于范围 VS2013      更新时间:2023-10-16
#include <vector>
int main()
{
    std::vector<int> v;
    for (int x : v) do {} while (0);
}

在VS2013上编译上面的代码将产生error C2059: syntax error : '}'。但是,GCC 可以成功编译代码。

若要重现错误,应满足以下要求:

  1. 使用基于范围的 for 循环;
  2. 不要用"{}"包围for-loop主体;
  3. 在 for 循环正文中编写单个"do while"语句。

对此有什么见解吗?

这是一个

错误,在VS2015中已修复。

您可以使用括号来避免 MSVC 2013 错误。以下代码在 MSVC 2013 更新 4 中编译良好:

std::vector<int> v;
for (int x : v)
{
    do
    {
    } while (0);
}