Home | History | Annotate | Download | only in SemaTemplate
      1 // RUN: %clang_cc1 -fsyntax-only -verify %s
      2 template<typename T> struct A {
      3   struct B { };
      4 
      5   friend struct B;
      6 };
      7 
      8 void f() {
      9   A<int>::B b;
     10 }
     11 
     12 struct C0 {
     13   friend struct A<int>;
     14 };
     15 
     16 namespace 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 
     35 namespace 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.
     39 void foo();
     40 void bar();
     41 template <typename T>
     42 class C {
     43   friend void foo();
     44   friend inline void bar();
     45 };
     46 inline void foo() {}
     47 inline void bar() {}
     48 C<int> c;
     49 }
     50