| // 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(); } | 
 | }; | 
 |  | 
 | inline void bar() {} // expected-note {{previous definition is here}} | 
 | class E { | 
 |   friend void bar() {} // expected-error {{redefinition of 'bar'}} | 
 | }; | 
 |  | 
 |  | 
 |  | 
 |  | 
 | template <typename t1, typename t2> class some_template; | 
 | friend   // expected-error {{'friend' used outside of class}} | 
 | some_template<foo, bar>&  // expected-error {{use of undeclared identifier 'foo'}} | 
 |   ;  // expected-error {{expected unqualified-id}} |