I came up with this reducing PR 15024: template<typename> struct CartesianURM; template<typename a> struct B { typedef CartesianURM<a> F; }; template <typename c> struct G : public B<c>::F { }; struct CartesianURM {}; G<int> f();
Indeed, a regression on 3.4 and mainline w.r.t. 3.3 and previous versions. The code is definitely invalid. This is the shortest I can get: ---------- template <int> struct X; struct X {}; ---------- W.
Subject: Bug 15025 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: mmitchel@gcc.gnu.org 2004-05-23 21:02:18 Modified files: gcc/testsuite : ChangeLog gcc/cp : ChangeLog decl.c Added files: gcc/testsuite/g++.dg/template: redecl1.C Log message: PR c++/15025 * decl.c (xref_tag): Issue errors about redeclaring template classes as non-template classes. PR c++/15025 * g++.dg/template/redecl1.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.180&r2=1.3389.2.181 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.103&r2=1.3892.2.104 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.1174.2.19&r2=1.1174.2.20 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/redecl1.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1
*** Bug 15024 has been marked as a duplicate of this bug. ***
Subject: Bug 15025 CVSROOT: /cvs/gcc Module name: gcc Changes by: mmitchel@gcc.gnu.org 2004-05-23 21:07:00 Modified files: gcc/testsuite : ChangeLog gcc/cp : ChangeLog decl.c Added files: gcc/testsuite/g++.dg/template: redecl1.C Log message: PR c++/15025 * decl.c (xref_tag): Issue errors about redeclaring template classes as non-template classes. PR c++/15025 * g++.dg/template/redecl1.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3774&r2=1.3775 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/redecl1.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4054&r2=1.4055 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.1209&r2=1.1210
Fixed in GCC 3.4.1.