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