On 30 August 2011 14:58, Pavel Dzhioev wrote: > Hello! > I have some class, that allows to iterate through numeric range. > For example code: > >> for (int i: range(N)) { >> cout << i << endl; >> } > > works fine. But if I try repeatedly do some action: > >> for (int i: range(N)) { >> doSomething(); >> } > > compiler gives me warning: > >> warning: unused variable `i' [-Wunused-variable] That's because the variable 'i' is not used after it's declared. > But at same time classic for-loop: > >> for (int i =3D 0; i < N; ++i) { >> doSomething(); >> } > > compiles without warnings. That's because the variable 'i' is used. > My compiler's version is "g++-4.6 (GCC) 4.6.1", compiler flags > "--std=c++0x -Wall" > I'm wondering, is it planned behavior or bug? I don't think it's a bug, since the -Wunused-variable warning is behaving exactly as it's designed to: you declared a variable 'i' and never used it. You could file an enhancement request in Bugzilla requesting that the warning is disabled for the variable in the for-range-declaration. To suppress the warning in your code you can do: for (int __attribute__((unused)) i : range(N)) Or: #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-variable" for (int i : range(N)) doSomething(); #pragma GCC diagnostic pop