Por que funções herdadas múltiplas com o mesmo nome, mas assinaturas diferentes não são tratadas como funções sobrecarregada

O trecho a seguir produz um erro de "chamada ambígua para foo" durante a compilação e eu gostaria de saber se existe alguma maneira de contornar esse problema sem qualificar totalmente a chamada para 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;
}

Então, a pergunta é como o título diz. Idéias? Quero dizer, o seguinte funciona perfeitamente:

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

questionAnswers(3)

yourAnswerToTheQuestion