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

            Bug ID: 59885
           Summary: compiler issues incorrect "ambiguous base class" error
                    message
           Product: gcc
           Version: 4.7.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burrows.labs at gmail dot com

The following code produces an error message that I believe to have swapped the
'base' and 'derived' class.


#include <iostream>

template <typename... Whatever>
class A;

template <typename Type>
class A<Type> {};

template <typename Type, typename Head, typename... Tail>
class A<Type, Head, Tail...> : A<Type, Tail...> {};

class B : public A<int, int, double> {};

template <typename Type, typename... Unused>
void f(A<Type, Unused...> *ref)
{
    std::cout << "f.a" << std::endl;
}

int
main()
{
    B *b = new B;
    f(b);

    return 0;
}

// eof

$ g++-4.7 -std=c++0x -pedantic -Wall in.cpp -o in
in.cpp: In function ‘int main()’:
in.cpp:24:8: error: no matching function for call to ‘f(B*&)’
in.cpp:24:8: note: candidate is:
in.cpp:15:6: note: template<class Type, class ... Unused> void f(A<Type, Unused
...>*)
in.cpp:15:6: note:   template argument deduction/substitution failed:
in.cpp:24:8: note:   ‘B’ is an ambiguous base class of ‘A<Type, Unused ...>’

Reply via email to