The declaration of use adds the function B::f to the scope of the class for searching, but the function is still B::f , not C::f . You can define the implementation in a derived type and move on to the implementation of B::f , otherwise you will have to change the inheritance hierarchy so that both B and C inherit (in fact) from A
void C::f() { B::f(); }
source share