forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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}}
 |