C++ generate a warning when a class member shadow a class member of its parent?

Viewed 5285

Is there a way to generate a warning when a derived class member variable name shadows one of its parents class, e.g

class Mother 
{
public:
  Mother() : i(0) {}
  virtual ~Mother() {}
protected:
  int i;
};

class Child : public Mother
{
public:
  Child() : Mother(), i(0) {}
  virtual ~Child() {}
protected:
  int i; /* NOK Expecting warning : declaration of 'int Child::i' shadows 'int Mother::i' */
};

Above code generates no warning when compiled with -Wshadow with g++.

3 Answers

In my tests, gcc 7.4.0 indeed does not show a warning for this with -Wshadow (nor with other -Wshadow* flags, and current documentation does not tell about this possibility.

However clang 6.0.0 has the option -Wshadow-field (included in -Wshadow-all) which gives on your code:

main.cxx:43:7: warning: non-static data member 'i' of 'Child' shadows member inherited from type 'Mother' [-Wshadow-field]

int i; /* NOK Expecting warning : declaration of 'int Child::i' shadows 'int Mother::i' */

main.cxx:34:7: note: declared here

Related