In:
struct bottom {};
template<typename v, typename next>
struct node: public next { v val; };
enum a {b, c}; enum x{y, z};
struct foo : public node<a,
node<x,
bottom> > {};
template<typename T, typename U>
void bar(node<T, U>&) {}
int main() { foo f; bar(f); return 0; }
you get:
~/ootbc/members/src$ g++ foo.cc
foo.cc: In function `int main()':
foo.cc:10: error: no matching function for call to `bar(foo&)'
Actually, there is a matching function, but the call is ambiguous because there
are two matching base classes. The diagnostic should say so and identify the
matching bases. This is reported correctly by other ambiguous calls where two
different functions are matches to the argument set. In this case one function
has two different matches, but the user's need in the diagnostic is the same:
show what the compiler found.
Ivan
--
Summary: poor diagnostic
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: igodard at pacbell dot net
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20576