The following code produces an error when compiled on Microsoft Visual C++ 6 SP3:
for (int i = 0; i < 10; i++)
cout << i << endl;
int i = 2;
error C2374: 'i' : redefinition; multiple initialization
But it compiles cleanly on gcc. Why? Which interpretation of the language specification is correct?
GCC got it right. The new scoping rules of C++ restrict the scope of a variable declared in a for-loop to the loop itself, but not outside it. Visual C++ is not compliant in this respect yet. When the loop terminates, it doesn't destroy the variable i, and as a result, your second declaration of i clashes with one declared in the fo-loop.