1 template <class T> class C0 {
2 T t;
3 };
4
5 template <class T, typename T0 = C0<const T>> class C1 {
6 T0 t0;
7 public:
c1rehash()8 void c1rehash() {}
9 };
10
11 template <class T, typename T1 = C0<C0<const T>>> class C2 {
12 T1 t1;
13 public:
c2rehash()14 void c2rehash() {}
15 };
16
17 template <class T, typename T2 = C0<C0<C0<const T>>>> class C3 {
18 T2 t2;
19 public:
c3rehash()20 void c3rehash() {}
21 };
22
23 template <class T, typename T3 = C0<C0<C0<C0<const T>>>>> class C4 {
24 T3 t3;
25 public:
c4rehash()26 void c4rehash() {}
27 };
28
29 template <class T, typename T4 = C0<C0<C0<C0<C0<const T>>>>>> class C5 {
30 T4 t4;
31 public:
c5rehash()32 void c5rehash() {}
33 };
34
35 template <class T, typename T3 = C0<C0<C0<C0<const T>>>>, class S = int> class C4x1 {
36 T3 t3;
37 S s;
38 public:
c4x1rehash()39 void c4x1rehash() {}
40 };
41
42 template <class T, typename T3 = C0<C0<C0<C0<const T>>>>, class S = C0<const T>> class C4x2 {
43 T3 t3;
44 S s;
45 public:
c4x2rehash()46 void c4x2rehash() {}
47 };
48
49
50 int
main(void)51 main(void)
52 {
53 C0 <int> c0;
54 C1 <int> c1();
55 C2 <int> c2();
56 C3 <int> c3();
57 C4 <int> c4();
58 C4x1 <int, int, int> cx41();
59 C4x2 <int, int, int> cx42();
60 return 0;
61 }
62