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