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