Описание тега name-hiding

A feature of the C++ language that causes functions in a base class to be hidden by overloads in a derived class.

A name can be hidden by another declaration with the same name in a different scope.

This can happen with names in nested scopes:

void f(int);

namespace ns {
  void f();     // hides ::f(int)
  void g() {
    f(1);       // error, name lookup finds ns::f()
  }
}

And also with names in derived classes:

class Base {
public:
  int func(int);
};
class Derived : Base {
public:
  void func();  // hides Base::func(int)
};

Derived d;
int i = d.func(1);  // error, name lookup finds Derived::func()

A hidden name can be made visible by re-declaring it in the second scope with a using declaration.