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