This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c++/3907: nested template parm collides with member name
- From: Wolfgang Bangerth <bangerth at ticam dot utexas dot edu>
- To: gcc-bugs at gcc dot gnu dot org, <gcc-gnats at gcc dot gnu dot org>
- Date: Fri, 15 Nov 2002 19:32:58 -0600 (CST)
- Subject: Re: c++/3907: nested template parm collides with member name
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