[Bug c++/78147] New: The -Wshadow warning is too aggressive with constructor parameters
psmith at gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri Oct 28 16:32:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78147
Bug ID: 78147
Summary: The -Wshadow warning is too aggressive with
constructor parameters
Product: gcc
Version: 6.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: psmith at gnu dot org
Target Milestone: ---
Created attachment 39918
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39918&action=edit
Simple patch disables shadow warnings for ctor params
There's a very common idiom in C++, I've even seen coding standards that
require it, where the constructor arguments have the same name as the member
they initialize:
class Foo
{
int foo;
public:
Foo(int foo) : foo(foo) {}
};
Unfortunately -Wshadow warns for this case.
Clang has an extra warning flag, -Wshadow-field-in-constructor, which controls
this (from what I can tell). By default in Clang, -Wshadow doesn't enable this
you need to separately enable it.
Attached below is a patch which permanently disables the warning for parameters
in constructors. If this seems interesting/desirable to people I can see about
putting some effort into adding it as a separate warning option. If we would
prefer GCC, unlike clang, enable it automatically with -Wshadow and allow
-Wno-shadow-field-in-constructor to disable it, that's OK with me.
In an ideal world we'd disable shadow warnings only for situations where the
parameter is used as a simple assignment in an initializer list, but that's
clearly a lot more work so I didn't do that. If we could do that I'd even
recommend not having a separate shadow option to control it, and just
hardcoding -Wshadow to never warn about that situation.
More information about the Gcc-bugs
mailing list