|  | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
|  | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s | 
|  | // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %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; | 
|  | #if __cplusplus <= 199711L | 
|  | // expected-warning@-2 {{unelaborated friend declaration is a C++11 extension; specify 'class' to befriend 'C'}} | 
|  | #endif | 
|  |  | 
|  | friend U; | 
|  | #if __cplusplus <= 199711L | 
|  | // expected-warning@-2 {{unelaborated friend declaration is a C++11 extension; specify 'union' to befriend 'U'}} | 
|  | #endif | 
|  |  | 
|  | friend int; | 
|  | #if __cplusplus <= 199711L | 
|  | // expected-warning@-2 {{non-class friend type 'int' is a C++11 extension}} | 
|  | #endif | 
|  |  | 
|  | 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}} |