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