http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57739
Bug ID: 57739 Summary: Weaker diagnostics of failed overload resolution when operators are declared as friends instead of externally Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: unmobile at gmail dot com Created attachment 30395 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30395&action=edit Base example of almost-OK error reporting $ /opt/local/bin/g++-mp-4.9 --version g++-mp-4.9 (MacPorts gcc49 4.9-20130623_0) 4.9.0 20130623 (experimental) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ /opt/local/bin/g++-mp-4.9 -c puptest.C puptest.C: In member function 'void SDAG::Closure::packClosure(PUP::er&)': puptest.C:34:9: error: no match for 'operator|' (operand types are 'PUP::er' and 'A {aka int}') p | continuations; ^ puptest.C:34:9: note: candidates are: puptest.C:24:8: note: void SDAG::operator|(PUP::er&, SDAG::Closure&) void operator|(PUP::er &p, Closure &a); ^ puptest.C:24:8: note: no known conversion for argument 2 from 'A {aka int}' to 'SDAG::Closure&' puptest.C:28:8: note: void SDAG::operator|(PUP::er&, SDAG::Closure*&) void operator|(PUP::er &p, Closure* &a); ^ puptest.C:28:8: note: no known conversion for argument 2 from 'A {aka int}' to 'SDAG::Closure*&' $ /opt/local/bin/g++-mp-4.9 -c puptest_friend.C puptest_friend.C: In member function 'void SDAG::Closure::packClosure(PUP::er&)': puptest_friend.C:34:9: error: no match for 'operator|' (operand types are 'PUP::er' and 'A {aka int}') p | continuations; ^