TTBOMK это не имеет реальной технической причины, просто Stroustrup, создавая язык, счел это лучшим вариантом по умолчанию.(В этом оно похоже на правило, согласно которому значения r неявно не связываются с не const
ссылками.)
Вы можете легко обойти это, явным образом перенося версии базового класса в область видимости производного класса:
class base {
public:
void f(int);
void g(int);
};
class derived : public base {
public:
using base::f;
void f(float);
void g(float); // hides base::g
};
или путем явного вызова:
derived d;
d.base::g(42); // explicitly call base class version