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}}
 |