OSDN Git Service

PR c++/29363
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / g++.dg / template / memfriend14.C
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 }