http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60095
Bug ID: 60095 Summary: Dubious diagnostics for attempted surrogate call function Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lucdanton at free dot fr Using ‘gcc version 4.9.0 20140123 (experimental) (GCC)’ with the following snippet: //-------- struct foo { typedef void(*ptr)(int&); operator ptr() const; }; int main() { foo f; void* p = 0; f(p); } //-------- $ g++-trunk -std=c++03 main.cpp main.cpp: In function 'int main()': main.cpp:10:8: error: no match for call to '(foo) (void*&)' f(p); ^ main.cpp:1:8: note: candidate is: struct foo { ^ main.cpp:10:8: note: foo::ptr {aka void (*)(int&)} <conversion> f(p); ^ main.cpp:10:8: note: candidate expects 2 arguments, 2 provided Same output for all -std=c++{03,11,1y} modes. If e.g. foo has a call operator instead, then the appropriate ‘no known conversion for argument 1 from 'void*' to 'int&'’ is produced.