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