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 of class template as friend 7 8 template<class T> struct A 9 { 10 void f(); 11 }; 12 13 class C { 14 int i; 15 template<class T> friend void A<T>::f(); 16 }; 17 18 template<class T> struct A<T*> 19 { 20 void f(); 21 }; 22 23 template<> struct A<char> 24 { 25 void f(); 26 }; 27 28 template<class T> void A<T>::f() 29 { 30 C c; 31 c.i = 0; 32 } 33 34 template<class T> void A<T*>::f() 35 { 36 C c; 37 c.i = 0; 38 } 39 40 void A<char>::f() 41 { 42 C c; 43 c.i = 0; 44 } 45 46 int main() 47 { 48 A<int> a1; 49 a1.f(); 50 A<int *> a2; 51 a2.f(); 52 A<char> a3; 53 a3.f(); 54 } 55