[Bug c++/56100] New: spurious -Wshadow warning with local variable in template class

f.heckenbach@fh-soft.de gcc-bugzilla@gcc.gnu.org
Thu Jan 24 21:11:00 GMT 2013


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56100

             Bug #: 56100
           Summary: spurious -Wshadow warning with local variable in
                    template class
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: f.heckenbach@fh-soft.de


Created attachment 29268
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29268
Test case

Compiling the test case with "-Wshadow" gives:

shadow.cpp: In instantiation of 'void bar<T>::baz() [with T = int]':
shadow.cpp:4:17:   required from 'void bar<T>::qux() [with T = int]'
shadow.cpp:13:21:   required from here
shadow.cpp:6:21: warning: declaration of 'foo' shadows a global declaration
[-Wshadow]
shadow.cpp:9:5: warning: shadowed declaration is here [-Wshadow]

Observed with 4.4.6, 4.6.1 and 4.7.2.

Note: "private" is not necessary to trigger the warning, it's just there to
show it occurs even with "private".

The warning seems strange because the supposedly shadowed variable is declared
after the shadowing one. (I assume that's because of the processing done during
instantiation.) It's annoying because it means that an identifier used in a
template defined in some header, even in a local scope in a private method is
"poisoned" when used anywhere else with -Wshadow.



More information about the Gcc-bugs mailing list