c++/3907: nested template parm collides with member name
Wolfgang Bangerth
bangerth@ticam.utexas.edu
Thu Nov 21 18:47:00 GMT 2002
The following reply was made to PR c++/3907; it has been noted by GNATS.
From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: gcc-bugs@gcc.gnu.org, <gcc-gnats@gcc.gnu.org>
Cc:
Subject: Re: c++/3907: nested template parm collides with member name
Date: Fri, 15 Nov 2002 19:32:58 -0600 (CST)
The original testcase was a rejection of illegal code
(because it accessed the nonexisting inner type U::S), but
I can make this a rejects-legal this way:
-----------------------------------------
template <int N> struct T { enum E { }; };
template <int s> struct U {};
template <int s> struct C {
template <int t> struct S : U<t> {};
typename T<s>::E t;
};
-----------------------------
tmp/g> /home/bangerth/bin/gcc-3.3x-pre/bin/c++ -c x.cc
x.cc:6: error: declaration of `typename T<N>::E C<s>::t'
x.cc:5: error: changes meaning of `t' from `int t'
Of course, the scope of the template arg "t" should be
limited to the end of the template class declaration.
If someone is adventurous: the initial code accepted
invalid code. I played with this further, and it is
now PR 8596.
Regards
Wolfgang
-------------------------------------------------------------------------
Wolfgang Bangerth email: bangerth@ticam.utexas.edu
www: http://www.ticam.utexas.edu/~bangerth
More information about the Gcc-prs
mailing list