// RUN: %clang_cc1 -fsyntax-only -verify %s // rdar://problem/8347416 namespace test0 { struct A { void foo(void (A::*)(int)); // expected-note {{passing argument to parameter here}} template void g(T); void test() { foo(&g); // expected-error-re {{cannot form member pointer of type 'void (test0::A::*)(int){{( __attribute__\(\(thiscall\)\))?}}' without '&' and class name}} } }; } // This should succeed. namespace test1 { struct A { static void f(void (A::*)()); static void f(void (*)(int)); void g(); static void g(int); void test() { f(&g); } }; } // Also rdar://problem/8347416 namespace test2 { struct A { static int foo(short); static int foo(float); int foo(int); int foo(double); void test(); }; void A::test() { // FIXME: The error message in this case is less than clear, we can do // better. int (A::*ptr)(int) = &(A::foo); // expected-error {{cannot create a non-constant pointer to member function}} } }