Почему множественные унаследованные функции с одинаковым именем, но разными сигнатурами не рассматриваются как перегруженные функции?

Следующий фрагмент кода вызывает ошибку "неоднозначный вызов foo" во время компиляции, и я хотел бы узнайте, есть ли способ обойти эту проблему без полной квалификации вызова foo:

#include <iostream>

struct Base1{
    void foo(int){
    }
};

struct Base2{
    void foo(float){
    }
};

struct Derived : public Base1, public Base2{
};

int main(){
    Derived d;
    d.foo(5);

    std::cin.get();
    return 0;
}

Итак, вопрос в том, как сказано в заголовке. Идеи? Я имею в виду, следующее работает безупречно:

#include <iostream>

struct Base{
    void foo(int){
    }
};

struct Derived : public Base{
    void foo(float){
    }
};

int main(){
    Derived d;
    d.foo(5);

    std::cin.get();
    return 0;
}
49
задан Wim Coenen 24 March 2011 в 07:46
поделиться