From e1a96a5729b45f77160029277379c72276cf94e9 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Sat, 31 Oct 1998 01:54:35 +0000 Subject: [PATCH] sizeof2.C: incorrect specialization of base template is selected * g++.old-deja/g++.pt/sizeof2.C: incorrect specialization of base template is selected From-SVN: r23468 --- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C | 22 +++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 42417b84158..5ea28f511c2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 1998-10-31 Alexandre Oliva + * g++.old-deja/g++.pt/sizeof2.C: incorrect specialization of base + template is selected + * g++.old-deja/g++.ext/arrnew2.C: if new T[n](i) is accepted for classes, it should be accepted for all types. diff --git a/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C b/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C new file mode 100644 index 00000000000..fba3ed67b4b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/sizeof2.C @@ -0,0 +1,22 @@ +// Although template class B is not used at all, it causes the +// incorrect specialization of A to be selected + +// Adapted from testcase by Oskar Enoksson + +// execution test - XFAIL *-*-* + +extern "C" void abort(); + +template // Base class +class A { public: static int n() { return sizeof(T); } }; + +template // Derived #1 +class B: public A {}; + +template // Derived #2 (wrong!) +class C: public A {}; + +int main() { + if (C<1,2>::n() != 2) + abort(); +} -- 2.30.2