1// RUN: %clang_cc1 -fsyntax-only -verify %s 2template<typename T> struct A { 3 struct B { }; 4 5 friend struct B; 6}; 7 8void f() { 9 A<int>::B b; 10} 11 12struct C0 { 13 friend struct A<int>; 14}; 15 16namespace PR6770 { 17 namespace N { 18 int f1(int); 19 } 20 using namespace N; 21 22 namespace M { 23 float f1(float); 24 } 25 using M::f1; 26 27 template<typename T> void f1(T, T); 28 template <class T> 29 void f() { 30 friend class f; // expected-error{{'friend' used outside of class}} 31 friend class f1; // expected-error{{'friend' used outside of class}} 32 } 33} 34 35namespace friend_redecl_inline { 36// We had a bug where instantiating the foo friend declaration would check the 37// defined-ness of the most recent decl while checking if the canonical decl was 38// inlined. 39void foo(); 40void bar(); 41template <typename T> 42class C { 43 friend void foo(); 44 friend inline void bar(); 45}; 46inline void foo() {} 47inline void bar() {} 48C<int> c; 49} 50