class A { public: void f(int i) { } } class B: A { public: void f() { } } int main() { B b = new B; b.f(1); } Error: function main.B.f () is not callable using argument types (int) Error: expected 0 arguments, not 1 for non-variadic function type void()
This is by design. Overloads are done against functions in the current scope, not across all accessible scopes. You can pull the base class functions into the current scope by adding this line: alias A.f f; to B.