Неоднозначно, когда два суперкласса имеют функцию-член с одинаковым именем, но разными сигнатурами

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);
}

По какой причине вызов dfдопустим, но cfдает

error: request for member ‘f’ is ambiguous
error: candidates are: template<class T> void B::f(T)
error:                 void A::f(int)
27
задан Fabio Dalla Libera 3 April 2012 в 05:11
поделиться