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