111
|
1 // { dg-do compile }
|
|
2
|
|
3 // Copyright (C) 2004 Free Software Foundation
|
|
4 // Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
|
|
5
|
|
6 // Nested class template of class template as friend
|
|
7
|
|
8 template<class T> struct A
|
|
9 {
|
|
10 template <T t> struct B
|
|
11 {
|
|
12 void f();
|
|
13 };
|
|
14 };
|
|
15
|
|
16 template <class U> class C {
|
|
17 int i;
|
|
18 template<class T> template <T t> friend struct A<T>::B;
|
|
19 };
|
|
20
|
|
21 template<class T> struct A<T*>
|
|
22 {
|
|
23 template <T* t> struct B
|
|
24 {
|
|
25 void f();
|
|
26 };
|
|
27 };
|
|
28
|
|
29 template<> struct A<char>
|
|
30 {
|
|
31 template <char t> struct B
|
|
32 {
|
|
33 void f();
|
|
34 };
|
|
35 };
|
|
36
|
|
37 template<class T> template <T t> void A<T>::B<t>::f()
|
|
38 {
|
|
39 C<int> c;
|
|
40 c.i = 0;
|
|
41 }
|
|
42
|
|
43 template<class T> template <T* t> void A<T*>::B<t>::f()
|
|
44 {
|
|
45 C<int> c;
|
|
46 c.i = 0;
|
|
47 }
|
|
48
|
|
49 template <char t> void A<char>::B<t>::f()
|
|
50 {
|
|
51 C<int> c;
|
|
52 c.i = 0;
|
|
53 }
|
|
54
|
|
55 template <> void A<char>::B<'b'>::f()
|
|
56 {
|
|
57 C<int> c;
|
|
58 c.i = 0;
|
|
59 }
|
|
60
|
|
61 int d2 = 0;
|
|
62
|
|
63 int main()
|
|
64 {
|
|
65 A<int>::B<0> b1;
|
|
66 b1.f();
|
|
67 A<int *>::B<&d2> b2;
|
|
68 b2.f();
|
|
69 A<char>::B<'a'> b3;
|
|
70 b3.f();
|
|
71 A<char>::B<'b'> b4;
|
|
72 b4.f();
|
|
73 }
|