void f(int,int); void f(int,int,int); void g () { (&f)(1,2,3); } gives: t.cpp: In function ‘void g()’: t.cpp:7: error: address of overloaded function with no contextual type information The C++ standard clause 13.3.1.1 says that '(&f)(...)' is the same as '(f)(...)', but the latter works and the former does not.
Confirmed.
*** Bug 36975 has been marked as a duplicate of this bug. ***
Looking into it, seems doable.
Not actively working on this.
Mine.
Author: paolo Date: Sat Nov 16 09:54:23 2013 New Revision: 204898 URL: http://gcc.gnu.org/viewcvs?rev=204898&root=gcc&view=rev Log: /cp 2013-11-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/29143 * semantics.c (finish_call_expr): Ensure that for OVERLOADs too '(&f)(...)' is the same as '(f)(...)', per 13.3.1.1. /testsuite 2013-11-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/29143 * g++.dg/overload/addr2.C: New. * g++.old-deja/g++.other/overload11.C: Adjust. Added: trunk/gcc/testsuite/g++.dg/overload/addr2.C Modified: trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/g++.old-deja/g++.other/overload11.C
Author: paolo Date: Sat Nov 16 09:54:42 2013 New Revision: 204899 URL: http://gcc.gnu.org/viewcvs?rev=204899&root=gcc&view=rev Log: /cp 2013-11-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/29143 * semantics.c (finish_call_expr): Ensure that for OVERLOADs too '(&f)(...)' is the same as '(f)(...)', per 13.3.1.1. /testsuite 2013-11-16 Paolo Carlini <paolo.carlini@oracle.com> PR c++/29143 * g++.dg/overload/addr2.C: New. * g++.old-deja/g++.other/overload11.C: Adjust. Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/semantics.c
Fixed for 4.9.0.