c++/3907: nested template parm collides with member name

Wolfgang Bangerth bangerth@ticam.utexas.edu
Fri Nov 15 17:30:00 GMT 2002

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.


Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth

More information about the Gcc-bugs mailing list