title: Ambiguous when two superclasses have a  member function with the same name, but different signatures
body: <pre><code>struct A {
      void f(int x) {}
  };
  
  struct B {
      template&lt;typename T&gt; void f(T x) {}
  };
  
  struct C : public A, public B {};
  
  struct D {
      void f(int x){}
      template&lt;typename T&gt; void f(T x) {} 
  };
  
  
  int main(int argc, char **argv) {
      C c;
      c.f&lt;int&gt;(3);
      D d;
      d.f&lt;int&gt;(3);
  }
  </code></pre>
  
  <p>What is the reason for which calling <code>d.f</code> is fine, but <code>c.f</code> gives </p>
  
  <pre><code>error: request for member ‘f’ is ambiguous
  error: candidates are: template&lt;class T&gt; void B::f(T)
  error:                 void A::f(int)
  </code></pre>