This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/57709] -Wshadow is too strict / has false positives


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57709

Gael Guennebaud <gael.guennebaud at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |gael.guennebaud at gmail dot com

--- Comment #15 from Gael Guennebaud <gael.guennebaud at gmail dot com> ---
-Wshadow still trigger false positive when a base member functions is imported
with the "using" keyword, as in the following example (tested with gcc 5.1):

template<typename T> struct BaseClass {
  BaseClass(int size) : m_size(size) {}
  int size() { return m_size; }
  int m_size;
};

template<typename T> struct Foo : BaseClass<T> {
  typedef BaseClass<T> Base;
  Foo(int size) : Base(size) {}
  using Base::size;
};

$ g++-mp-5 gcc_shadow.cpp -c  -Wshadow 
gcc_shadow.cpp: In constructor 'Foo<T>::Foo(int)':
gcc_shadow.cpp:9:17: warning: declaration of 'size' shadows a member of
'Foo<T>' [-Wshadow]
   Foo(int size) : Base(size) {}
                 ^
gcc_shadow.cpp:10:15: note: shadowed declaration is here
   using Base::size;


Note that clang does not warn in this case, so it should be possible to figure
out that in this case, the imported "size" symbol is a function and not a
variable.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]