Ambiguo cuando dos superclases tienen una función miembro con el mismo nombre, pero con firmas diferentes

struct A {
    void f(int x) {}
};

struct B {
    template<typename T> void f(T x) {}
};

struct C : public A, public B {};

struct D {
    void f(int x){}
    template<typename T> void f(T x) {} 
};


int main(int argc, char **argv) {
    C c;
    c.f<int>(3);
    D d;
    d.f<int>(3);
}

¿Cuál es la razón por la cual se llama ad.f está bien, peroc.f d

error: request for member ‘f’ is ambiguous
error: candidates are: template<class T> void B::f(T)
error:                 void A::f(int)

Respuestas a la pregunta(10)

Su respuesta a la pregunta