2016-01-08 56 views
2
#include <vector> 

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

編譯VS2013上的代碼將產生error C2059: syntax error : '}'。但是,GCC可以成功編譯代碼。在基於範圍的循環和while循環同時使用時編譯VS2013錯誤

要重現錯誤,下列要求應滿足:

  1. 使用範圍爲基礎的循環;
  2. 不要用「{}」圍住for循環體;
  3. 在for循環體中編寫一個「do while」語句。

對此有何見解?

+0

這是宏擴展的結果還是您如何發現該錯誤? – MikeMB

+0

這是一些宏擴展的結果,如'do {blabla} while(0)' –

回答

0

這是一個錯誤,它已在VS2015中修復。

0

您可以使用括號來避免MSVC 2013錯誤。以下代碼在MSVC 2013 Update 4中編譯正常:

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