1// { dg-do compile } 2 3// Copyright (C) 2004 Free Software Foundation 4// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> 5 6// Nested class template of class template as friend 7 8template <class T> struct A 9{ 10 template <class U> struct B 11 { 12 void f(); 13 }; 14}; 15 16class C { 17 int i; 18 template <class T> template <class U> friend struct A<T>::B; 19}; 20 21template <class T> struct A<T*> 22{ 23 template <class U> struct B 24 { 25 void f(); 26 }; 27}; 28 29template <> struct A<char> 30{ 31 template <class U> struct B 32 { 33 void f(); 34 }; 35}; 36 37template <class T> template <class U> void A<T>::B<U>::f() 38{ 39 C c; 40 c.i = 0; 41} 42 43template <class T> template <class U> void A<T*>::B<U>::f() 44{ 45 C c; 46 c.i = 0; 47} 48 49template <class U> void A<char>::B<U>::f() 50{ 51 C c; 52 c.i = 0; 53} 54 55template <> void A<char>::B<int>::f() 56{ 57 C c; 58 c.i = 0; 59} 60 61int main() 62{ 63 A<int>::B<int> b1; 64 b1.f(); 65 A<int *>::B<int> b2; 66 b2.f(); 67 A<char>::B<char> b3; 68 b3.f(); 69 A<char>::B<int> b4; 70 b4.f(); 71} 72