aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>1998-01-22 06:04:02 -0500
committerJason Merrill <jason@gcc.gnu.org>1998-01-22 06:04:02 -0500
commitff7620c005436d4d35b6a536ae27456725c28c88 (patch)
tree2f1cb0bb228800cc49452fe83f1f3ce42452422a
parent73b0fce8fd7d5b9e166a6f283cf73215f9873473 (diff)
downloadgcc-ff7620c005436d4d35b6a536ae27456725c28c88.zip
gcc-ff7620c005436d4d35b6a536ae27456725c28c88.tar.gz
gcc-ff7620c005436d4d35b6a536ae27456725c28c88.tar.bz2
new
From-SVN: r17442
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp1.C14
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp10.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp11.C25
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp12.C28
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp13.C28
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp14.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp15.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp16.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp17.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp18.C30
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp19.C24
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp2.C14
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp20.C27
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp21.C33
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp22.C33
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp23.C33
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp24.C22
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp25.C33
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp26.C33
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp27.C35
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp28.C39
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp29.C32
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp3.C14
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp30.C37
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp31.C32
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp32.C37
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp33.C31
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp34.C31
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp35.C35
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp36.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp37.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp38.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp39.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp4.C15
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp5.C15
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp6.C13
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp7.C15
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp8.C17
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ttp9.C13
39 files changed, 1053 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C
new file mode 100644
index 0000000..4c6bac0
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp1.C
@@ -0,0 +1,14 @@
+// Build don't link:
+
+template<class E> class D
+{
+};
+
+template<template<class> class D,class E> class C
+{
+};
+
+int main()
+{
+ C<int,D> c; // ERROR - args not match
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C
new file mode 100644
index 0000000..ca0c9b6
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp10.C
@@ -0,0 +1,30 @@
+// Build don't link:
+
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D d; // ERROR - D is a template
+ public:
+ int f();
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ return d.f(); // ERROR - d not properly declared
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C
new file mode 100644
index 0000000..213eb40
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp11.C
@@ -0,0 +1,25 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+int main()
+{
+ C<D,int> c;
+ C<D,char> d;
+ c.f();
+ d.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C
new file mode 100644
index 0000000..c9bc9f3
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp12.C
@@ -0,0 +1,28 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class E,class D> class C
+{
+ E<D> d;
+ public:
+ int f();
+};
+
+template<template<class> class E,class D> int C<E,D>::f()
+{
+ return d.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C
new file mode 100644
index 0000000..2745c7a
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp13.C
@@ -0,0 +1,28 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ return d.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C
new file mode 100644
index 0000000..3b284ae
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp14.C
@@ -0,0 +1,30 @@
+template<class T> class D
+{
+ T a;
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<class E,template<class> class DD = D> class C
+{
+ DD<E> d;
+ public:
+ int f();
+};
+
+template<class E,template<class> class DD = D> int C<E,DD>::f()
+{
+ DD<E> d2;
+ return d2.f();
+}
+
+int main()
+{
+ C<int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C
new file mode 100644
index 0000000..25f3c4d
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp15.C
@@ -0,0 +1,29 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ D<E> d2;
+ return d2.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C
new file mode 100644
index 0000000..ac736fa
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp16.C
@@ -0,0 +1,30 @@
+template<class T> class D
+{
+ T a;
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ D<E> d2;
+ return d2.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C
new file mode 100644
index 0000000..6852404
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp17.C
@@ -0,0 +1,30 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+ int g() { return 0; }
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ C<D,E> d2;
+ return d2.g();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C
new file mode 100644
index 0000000..6c9e579
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp18.C
@@ -0,0 +1,30 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+ int g() { return 0; }
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ C<D,char> d2;
+ return d2.g();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C
new file mode 100644
index 0000000..8a24946
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp19.C
@@ -0,0 +1,24 @@
+#include <vector>
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int size() { return d.size(); }
+};
+
+template<template<class> class D,class E> int size(D<E> &d1)
+{
+ d1.size();
+ C<D,E> d2;
+ d2.size();
+ return 0;
+}
+
+int main()
+{
+ std::vector<int> c1;
+ std::vector<char> c2;
+ size(c1);
+ size(c2);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C
new file mode 100644
index 0000000..5badbe2
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp2.C
@@ -0,0 +1,14 @@
+// Build don't link:
+
+template<class E> class D
+{
+};
+
+template<template<class> class D,int> class C
+{
+};
+
+int main()
+{
+ C<1,D> c; // ERROR - args not match
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C
new file mode 100644
index 0000000..e3b26c6
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp20.C
@@ -0,0 +1,27 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C : D<E>
+{
+ public:
+ int g();
+};
+
+template<template<class> class D,class E> int C<D,E>::g()
+{
+ return f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.g();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C
new file mode 100644
index 0000000..c6cc24b
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp21.C
@@ -0,0 +1,33 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C : D<E>
+{
+ public:
+ int g();
+};
+
+template<template<class> class D,class E> int C<D,E>::g()
+{
+ return f();
+}
+
+class E : C<D,int>
+{
+ public:
+ int h() { return g(); }
+};
+
+int main()
+{
+ E c;
+ c.h();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C
new file mode 100644
index 0000000..7eac0ed
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp22.C
@@ -0,0 +1,33 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class DD,class EE> class C : DD<EE>
+{
+ public:
+ int f();
+};
+
+template<template<class> class DD,class EE> int C<DD,EE>::f()
+{
+ return DD<EE>::f();
+}
+
+class E : C<D,int>
+{
+ public:
+ int f() { return C<D,int>::f(); }
+};
+
+int main()
+{
+ E c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C
new file mode 100644
index 0000000..636bb1c
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp23.C
@@ -0,0 +1,33 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class E,class D> class C : E<D>
+{
+ public:
+ int f();
+};
+
+template<template<class> class E,class D> int C<E,D>::f()
+{
+ return E<D>::f();
+}
+
+class E : C<D,int>
+{
+ public:
+ int f() { return C<D,int>::f(); }
+};
+
+int main()
+{
+ E c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C
new file mode 100644
index 0000000..1e6278f
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp24.C
@@ -0,0 +1,22 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> int f()
+{
+ D<E> d;
+ return d.f();
+};
+
+int main()
+{
+ f<D,int>();
+ f<D,char>();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C
new file mode 100644
index 0000000..c30905e
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp25.C
@@ -0,0 +1,33 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<class> class D,class E> int f(D<E> &d1)
+{
+ d1.f();
+ C<D,E> d2;
+ d2.f();
+ return 0;
+}
+
+int main()
+{
+ D<int> c1;
+ D<char> c2;
+ f(c1);
+ f(c2);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C
new file mode 100644
index 0000000..6e6425e
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp26.C
@@ -0,0 +1,33 @@
+template<class T, class U = int> class D
+{
+ public:
+ int f();
+};
+
+template<class T, class U> int D<T,U>::f()
+{
+ return sizeof(T)+sizeof(U);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<class> class D,class E> int f(D<E> &d1)
+{
+ d1.f();
+ C<D,E> d2;
+ d2.f();
+ return 0;
+}
+
+int main()
+{
+ D<int> c1;
+ D<char> c2;
+ f(c1);
+ f(c2);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C
new file mode 100644
index 0000000..7ecf301
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp27.C
@@ -0,0 +1,35 @@
+template<class T> class D
+{
+ public:
+ int f() const;
+};
+
+template<class T> int D<T>::f() const
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() const { return d.f(); }
+};
+
+template<template<class> class D,class E> int f(const D<E> &d1)
+{
+ d1.f();
+ C<D,E> d2;
+ d2.f();
+ return 0;
+}
+
+int main()
+{
+ D<const int> c1;
+ D<char> c2;
+ const D<char> c3(c2);
+ f(c1);
+ f(c2);
+ f(c3);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C
new file mode 100644
index 0000000..5948dc5
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp28.C
@@ -0,0 +1,39 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<class> class D,class E> int f(D<E> &d1)
+{
+ d1.f();
+ C<D,E> d2;
+ d2.f();
+ return 0;
+}
+
+template<> int f<>(D<char> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+int main()
+{
+ D<int> c1;
+ D<char> c2;
+ f(c1);
+ f(c2);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C
new file mode 100644
index 0000000..b431ad0
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp29.C
@@ -0,0 +1,32 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+extern "C" void abort();
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { abort(); return 0; }
+};
+
+template<class E> class C<D,E>
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C
new file mode 100644
index 0000000..db22c6f
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp3.C
@@ -0,0 +1,14 @@
+// Build don't link:
+
+template<class E,class F> class D
+{
+};
+
+template<template<class> class D,class E> class C
+{ // ERROR - ref below
+};
+
+int main()
+{
+ C<D,int> c; // ERROR - param list not match
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C
new file mode 100644
index 0000000..c47b157
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp30.C
@@ -0,0 +1,37 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+extern "C" void abort();
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { abort(); return 0; }
+};
+
+template<class E> class C<D,E>
+{
+ D<E> d;
+ public:
+ int f();
+};
+
+template<class E> int C<D,E>::f()
+{
+ return d.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C
new file mode 100644
index 0000000..4e1acf2
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp31.C
@@ -0,0 +1,32 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+extern "C" void abort();
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { abort(); return 0; }
+};
+
+template<template <class> class F> class C<F,int>
+{
+ F<int> d;
+ public:
+ int f() { return d.f(); }
+};
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C
new file mode 100644
index 0000000..5c7a63a
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp32.C
@@ -0,0 +1,37 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+extern "C" void abort();
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { abort(); return 0; }
+};
+
+template<template <class> class F> class C<F,int>
+{
+ F<int> d;
+ public:
+ int f();
+};
+
+template<template<class>class F> int C<F,int>::f()
+{
+ return d.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C
new file mode 100644
index 0000000..3755ff3
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp33.C
@@ -0,0 +1,31 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ template<template<class> class F> int f(F<int>);
+};
+
+template<template<class> class D,class E>
+template<template<class> class F> int C<D,E>::f(F<int>)
+{
+ F<E> d2;
+ return d2.f();
+}
+
+int main()
+{
+ C<D,int> c;
+ D<int> d;
+ c.f(d);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C
new file mode 100644
index 0000000..d605043
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp34.C
@@ -0,0 +1,31 @@
+template<class T> class D
+{
+ public:
+ int f();
+};
+
+template<class T> int D<T>::f()
+{
+ return sizeof(T);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f();
+};
+
+template<template<class> class D,class E> int C<D,E>::f()
+{
+ D<E> d2;
+ return d2.f();
+}
+
+template class C<D,int>;
+
+int main()
+{
+ C<D,int> c;
+ c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C
new file mode 100644
index 0000000..655f406
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp35.C
@@ -0,0 +1,35 @@
+template<int T, class U = int> class D
+{
+ public:
+ int f();
+};
+
+template<int T, class U> int D<T,U>::f()
+{
+ return T+sizeof(U);
+}
+
+template<template<int> class D,class E> class C
+{
+ D<1> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<int> class D> int f(D<2> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+template<template<int> class D> int f(D<1> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+int main()
+{
+ D<1> c1;
+ f(c1);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C
new file mode 100644
index 0000000..976bc0e
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp36.C
@@ -0,0 +1,29 @@
+template<int T, class U = int> class D
+{
+ public:
+ int f();
+};
+
+template<int T, class U> int D<T,U>::f()
+{
+ return T+sizeof(U);
+}
+
+template<template<int> class D,class E> class C
+{
+ D<1> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<int> class D> int f(D<1> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+int main()
+{
+ D<1> c1;
+ f(c1);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C
new file mode 100644
index 0000000..01b0d29
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp37.C
@@ -0,0 +1,29 @@
+template<int T, class U = int> class D
+{
+ public:
+ int f();
+};
+
+template<int T, class U> int D<T,U>::f()
+{
+ return T+sizeof(U);
+}
+
+template<template<int> class D,class E> class C
+{
+ D<1> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<int> class D, int T> int f(D<T> &d1)
+{
+ d1.f();
+ return T;
+}
+
+int main()
+{
+ D<1> c1;
+ f(c1);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C
new file mode 100644
index 0000000..00c663c
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp38.C
@@ -0,0 +1,29 @@
+template<class T, class U = int> class D
+{
+ public:
+ int f();
+};
+
+template<class T, class U> int D<T,U>::f()
+{
+ return sizeof(T)+sizeof(U);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<class> class D> int f(D<int> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+int main()
+{
+ D<int> c1;
+ f(c1);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C
new file mode 100644
index 0000000..24ff6c0
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp39.C
@@ -0,0 +1,29 @@
+template<class T, class U = T> class D
+{
+ public:
+ int f();
+};
+
+template<class T, class U> int D<T,U>::f()
+{
+ return sizeof(T)+sizeof(U);
+}
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+ public:
+ int f() { return d.f(); }
+};
+
+template<template<class> class D> int f(D<int> &d1)
+{
+ d1.f();
+ return 0;
+}
+
+int main()
+{
+ D<int> c1;
+ f(c1);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C
new file mode 100644
index 0000000..249ad9c
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp4.C
@@ -0,0 +1,15 @@
+// Build don't link:
+
+template<class E> class D
+{
+};
+
+template<template<class> class D,class E> class C
+{
+ D<1> d; // ERROR - arg not match
+};
+
+int main()
+{
+ C<D,int> c;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C
new file mode 100644
index 0000000..4b835e8
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp5.C
@@ -0,0 +1,15 @@
+// Build don't link:
+
+template<int> class D
+{
+};
+
+template<template<int> class D,class E> class C
+{
+ D<int> d; // ERROR - arg not match
+};
+
+int main()
+{
+ C<D,int> c;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C
new file mode 100644
index 0000000..cdea182
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp6.C
@@ -0,0 +1,13 @@
+template<int> class F
+{
+};
+
+template<template<int> class D,class E> class C
+{
+ D<1> d;
+};
+
+int main()
+{
+ C<F,int> c;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C
new file mode 100644
index 0000000..0b98217
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp7.C
@@ -0,0 +1,15 @@
+// Build don't link:
+
+template<class E> class D
+{
+};
+
+template<template<class> class D,class E> class C // ERROR - ref below
+{
+ D<int,int> d; // ERROR - arg not match
+};
+
+int main()
+{
+ C<D,int> c;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C
new file mode 100644
index 0000000..fd2a67c
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp8.C
@@ -0,0 +1,17 @@
+template<class E> class DD
+{
+};
+
+template<int> class D
+{
+};
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+};
+
+int main()
+{
+ C<DD,int> c;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C
new file mode 100644
index 0000000..3892b6e
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ttp9.C
@@ -0,0 +1,13 @@
+template<class E,class F=int> class D
+{
+};
+
+template<template<class> class D,class E> class C
+{
+ D<E> d;
+};
+
+int main()
+{
+ C<D,int> c;
+}