|  | // RUN: %clang_cc1 -fsyntax-only -verify %s | 
|  | template<typename T> struct A { | 
|  | struct B { }; | 
|  |  | 
|  | friend struct B; | 
|  | }; | 
|  |  | 
|  | void f() { | 
|  | A<int>::B b; | 
|  | } | 
|  |  | 
|  | struct C0 { | 
|  | friend struct A<int>; | 
|  | }; | 
|  |  | 
|  | namespace PR6770 { | 
|  | namespace N { | 
|  | int f1(int); | 
|  | } | 
|  | using namespace N; | 
|  |  | 
|  | namespace M { | 
|  | float f1(float); | 
|  | } | 
|  | using M::f1; | 
|  |  | 
|  | template<typename T> void f1(T, T); | 
|  | template <class T> | 
|  | void f() { | 
|  | friend class f; // expected-error{{'friend' used outside of class}} | 
|  | friend class f1; // expected-error{{'friend' used outside of class}} | 
|  | } | 
|  | } | 
|  |  | 
|  | namespace friend_redecl_inline { | 
|  | // We had a bug where instantiating the foo friend declaration would check the | 
|  | // defined-ness of the most recent decl while checking if the canonical decl was | 
|  | // inlined. | 
|  | void foo(); | 
|  | void bar(); | 
|  | template <typename T> | 
|  | class C { | 
|  | friend void foo(); | 
|  | friend inline void bar(); | 
|  | }; | 
|  | inline void foo() {} | 
|  | inline void bar() {} | 
|  | C<int> c; | 
|  | } |