struct A {
void f(int x) {}
};
struct B {
template void f(T x) {}
};
struct C : public A, public B {};
struct D {
void f(int x){}
te
A compiler doesn't know which method to call from the C class because templated method will be transormed in void f(int) in case of int type so you have two methods with the same name and same arguments but members of different parent classes.
template void f(T x) {}
or
void f(int)
try this:
c.B::f(3);
or this for the A class:
c.A::f(3);