1 // { dg-do compile } 2 3 // Origin: Giovanni Bajo <giovannibajo@libero.it> 4 5 // PR c++/13495: Nested class as template friend. 6 7 template<typename T> 8 class A{ 9 public: 10 class B 11 { 12 void func1(void); 13 void func2(void); 14 }; 15 }; 16 17 template<typename Q> 18 class F1 19 { 20 friend class A<Q>::B; 21 enum { foo = 0 }; // { dg-message "private" } 22 }; 23 24 template<typename Q> 25 class F2 26 { 27 template<typename T> 28 friend class A<T>::B; 29 enum { foo = 0 }; 30 }; 31 32 template <typename T> func1(void)33void A<T>::B::func1(void) 34 { 35 (void)F1<T>::foo; 36 (void)F2<T>::foo; 37 } 38 39 template <typename T> func2(void)40void A<T>::B::func2(void) 41 { 42 (void)F1<T*>::foo; // { dg-error "context" } 43 (void)F2<T*>::foo; 44 } 45 46 template class A<int>; // { dg-message "required" } 47