summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/memclass4.C23
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/memclass5.C20
2 files changed, 43 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C b/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C
new file mode 100644
index 00000000000..de490e09a83
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/memclass4.C
@@ -0,0 +1,23 @@
+#include <typeinfo>
+
+template <class T>
+struct allocator {
+ typedef T* pointer;
+
+ template <class U> struct rebind {
+ typedef allocator<U> other;
+ };
+};
+
+template <class T, class Allocator>
+struct alloc_traits
+{
+ typedef typename Allocator::template rebind<T>::other allocator_type;
+};
+
+main ()
+{
+ typedef alloc_traits<int, allocator<void> >::allocator_type at;
+
+ return typeid (at) != typeid (allocator <int>);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C b/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C
new file mode 100644
index 00000000000..82dbd7612ca
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/memclass5.C
@@ -0,0 +1,20 @@
+template <class T> struct A {
+ template <class U> struct B {
+ template <class V> static void f () { }
+ void g () { }
+ };
+};
+
+template <class T, class U>
+void f ()
+{
+ A<T>::template B<U>::template f<T> ();
+ typename A<T>::B<U> b;
+ typename A<T>::template B<U> b2;
+ b.A<T>::template B<U>::~B();
+}
+
+main ()
+{
+ f<int, char>();
+}