http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57327

            Bug ID: 57327
           Summary: 'derived' is an ambiguous base class of 'base'
                    diagnostic is bacwards
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org

struct A {};

template<class T, class U>
void f(A<T, U>&) {}

template<class T>
struct B : A<T, long> {};

template<class T>
struct C : A<T, char> {};

template<class T>
struct D : B<T>, C<T> {};

int main()
{
  D<int> d;
  f(d);
}

ambig.cc: In function ‘int main()’:
ambig.cc:19:6: error: no matching function for call to ‘f(D<int>&)’
ambig.cc:19:6: note: candidate is:
ambig.cc:5:6: note: template<class T, class U> void f(A<T, U>&)
ambig.cc:5:6: note:   template argument deduction/substitution failed:
ambig.cc:19:6: note:   ‘D<int>’ is an ambiguous base class of ‘A<T, U>’


G++ is right to reject the code, but note the last line of the diagnostic which
says D is a base class of A, which is backwards.

Reply via email to