title: Why do multiple-inherited functions with same name but different signatures not get treated as overloaded functions?
body: <p>The following snippet produces an "ambigious call to foo" error during compilation, and I'd like to know if there is any way around this problem without fully qualifying the call to foo:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  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;
  }
  </code></pre>
  
  <p>So, question is as the title says. Ideas? I mean, the following works flawlessly:</p>
  
  <pre><code>#include &lt;iostream&gt;
  
  struct Base{
      void foo(int){
      }
  };
  
  struct Derived : public Base{
      void foo(float){
      }
  };
  
  int main(){
      Derived d;
      d.foo(5);
  
      std::cin.get();
      return 0;
  }
  </code></pre>