// RUN: %clang_cc1 -fsyntax-only -verify %s template struct A { struct B { }; friend struct B; }; void f() { A::B b; } struct C0 { friend struct A; }; namespace PR6770 { namespace N { int f1(int); } using namespace N; namespace M { float f1(float); } using M::f1; template void f1(T, T); template 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 class C { friend void foo(); friend inline void bar(); }; inline void foo() {} inline void bar() {} C c; }