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