[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