Re: Strange warning in C++11 range based for loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux