This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]