------- Comment #2 from igodard at pacbell dot net 2009-12-14 04:51 ------- Well, I see several issues with the diagnostics.
1) The call is not ambiguous, because if it were (only) ambiguous then removing the base "baz" would disambiguate. Instead the case without "baz" gets you: s3:~/ootbc/memspec$ g++ foo.cc foo.cc: In function int main(): foo.cc:27: error: no matching function for call to foo::newNode() That is, a call cannot be both ambiguous and have no matching function. 2) The reported list of overloads include those which have the wrong number of arguments. 3) The diagnostic contains "freeList::newNode(U, V) [with U = U, V = V, T = bar]" as the call citation, which makes it look like the local U matches a (non-existent in this case) global U and local V matches a global V, the way that local T matches global bar. Perhaps it could say something like "freeList::newNode(U, V) [with U = ?, V = ?, T = bar]" -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42356