1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 typedef void F() const; 4 5 void f() const; // expected-error {{non-member function cannot have 'const' qualifier}} 6 F g; // expected-error {{non-member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} 7 8 struct X { 9 void f() const; 10 friend void g() const; // expected-error {{non-member function cannot have 'const' qualifier}} 11 static void h() const; // expected-error {{static member function cannot have 'const' qualifier}} 12 F i; // ok 13 friend F j; // expected-error {{non-member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} 14 static F k; // expected-error {{static member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} 15 }; 16 17 struct Y { 18 friend void X::f() const; 19 friend void ::f() const; // expected-error {{non-member function cannot have 'const' qualifier}} 20 }; 21 22 template<typename T> struct S { 23 typedef T F; 24 typedef T *P; // expected-error {{pointer to function type 'void () const' cannot have 'const' qualifier}} 25 typedef T &R; // expected-error {{reference to function type 'void () const' cannot have 'const' qualifier}} 26 }; 27 S<F> s; // expected-note {{in instantiation of}} 28 29 // FIXME: This is ill-formed. 30 template<typename T> struct U { 31 void f(T); 32 }; 33 U<F> u; 34