addr-of-overloaded-function.cpp revision 60d923125a1f267403f1b62fa9a15d702e557dbf
1// RUN: clang-cc -fsyntax-only -verify %s 2int f(double); 3int f(int); 4 5int (*pfd)(double) = f; // selects f(double) 6int (*pfd2)(double) = &f; // selects f(double) 7int (*pfd3)(double) = ((&((f)))); // selects f(double) 8int (*pfi)(int) = &f; // selects f(int) 9// FIXME: This error message is not very good. We need to keep better 10// track of what went wrong when the implicit conversion failed to 11// give a better error message here. 12int (*pfe)(...) = &f; // expected-error{{incompatible type initializing '<overloaded function type>', expected 'int (*)(...)'}} 13int (&rfi)(int) = f; // selects f(int) 14int (&rfd)(double) = f; // selects f(double) 15 16void g(int (*fp)(int)); // expected-note{{note: candidate function}} 17void g(int (*fp)(float)); 18void g(int (*fp)(double)); // expected-note{{note: candidate function}} 19 20int g1(int); 21int g1(char); 22 23int g2(int); 24int g2(double); 25 26template<typename T> T g3(T); 27int g3(int); 28int g3(char); 29 30void g_test() { 31 g(g1); 32 g(g2); // expected-error{{call to 'g' is ambiguous; candidates are:}} 33 g(g3); 34} 35 36template<typename T> T h1(T); 37template<typename R, typename A1> R h1(A1); 38int h1(char); 39 40void ha(int (*fp)(int)); 41void hb(int (*fp)(double)); 42 43void h_test() { 44 ha(h1); 45 hb(h1); 46} 47