Home | History | Annotate | Download | only in dcl.fct
      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