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