// RUN: %clang_cc1 -fsyntax-only -verify %s class C { friend class D; }; class A { public: void f(); }; friend int x; // expected-error {{'friend' used outside of class}} friend class D {}; // expected-error {{'friend' used outside of class}} union U { int u1; }; class B { // 'A' here should refer to the declaration above. friend class A; friend C; // expected-warning {{specify 'class' to befriend}} friend U; // expected-warning {{specify 'union' to befriend}} friend int; // expected-warning {{non-class friend type 'int'}} friend void myfunc(); void f(A *a) { a->f(); } }; void bar() {} // expected-note {{previous definition is here}} class E { friend void bar() {} // expected-error {{redefinition of 'bar'}} }; template class some_template; friend // expected-error {{'friend' used outside of class}} some_template& // expected-error {{use of undeclared identifier 'foo'}} ; // expected-error {{expected unqualified-id}}