// RUN: %clang_cc1 -fsyntax-only -verify %s typedef void F() const; void f() const; // expected-error {{non-member function cannot have 'const' qualifier}} F g; // expected-error {{non-member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} struct X { void f() const; friend void g() const; // expected-error {{non-member function cannot have 'const' qualifier}} static void h() const; // expected-error {{static member function cannot have 'const' qualifier}} F i; // ok friend F j; // expected-error {{non-member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} static F k; // expected-error {{static member function of type 'F' (aka 'void () const') cannot have 'const' qualifier}} }; struct Y { friend void X::f() const; friend void ::f() const; // expected-error {{non-member function cannot have 'const' qualifier}} }; template<typename T> struct S { typedef T F; typedef T *P; // expected-error {{pointer to function type 'void () const' cannot have 'const' qualifier}} typedef T &R; // expected-error {{reference to function type 'void () const' cannot have 'const' qualifier}} }; S<F> s; // expected-note {{in instantiation of}} // FIXME: This is ill-formed. template<typename T> struct U { void f(T); }; U<F> u;