1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 // rdar://problem/8347416 4 namespace test0 { 5 struct A { 6 void foo(void (A::*)(int)); // expected-note {{passing argument to parameter here}} 7 template<typename T> void g(T); 8 testtest0::A9 void test() { 10 foo(&g<int>); // expected-error-re {{cannot form member pointer of type 'void (test0::A::*)(int){{( __attribute__\(\(thiscall\)\))?}}' without '&' and class name}} 11 } 12 }; 13 } 14 15 // This should succeed. 16 namespace test1 { 17 struct A { 18 static void f(void (A::*)()); 19 static void f(void (*)(int)); 20 void g(); 21 static void g(int); 22 testtest1::A23 void test() { 24 f(&g); 25 } 26 }; 27 } 28 29 // Also rdar://problem/8347416 30 namespace test2 { 31 struct A { 32 static int foo(short); 33 static int foo(float); 34 int foo(int); 35 int foo(double); 36 37 void test(); 38 }; 39 test()40 void A::test() { 41 // FIXME: The error message in this case is less than clear, we can do 42 // better. 43 int (A::*ptr)(int) = &(A::foo); // expected-error {{cannot create a non-constant pointer to member function}} 44 } 45 } 46