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