title: Ambiguous multiple inheritance of template classes
body: <p>I've got a real situation which can be summarized in the following example:</p>
  
  <pre><code>template&lt; typename ListenerType &gt;
  struct Notifier
  {
      void add_listener( ListenerType&amp; ){}
  };
  
  struct TimeListener{ };
  struct SpaceListener{ };
  
  struct A : public Notifier&lt; TimeListener &gt;
           , public Notifier&lt; SpaceListener &gt;
  {
  
  };
  
  struct B : TimeListener{ };
  
  int main()
  {
      A a;
      B b;
  
      a.add_listener( b );    // why is ambiguous?
  
      return 0;
  }
  </code></pre>
  
  <p>Why is not obvious to the compiler that <code>B</code> is a <code>TimeListener</code>, and therefore the only possible overload resolution is <code>Notifier&lt; TimeListener &gt;::add_listener( TimeListener&amp; )</code> ?</p>