• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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