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++/8772: Segmentation fault on 3 lines of template code


Wolfgang Bangerth <bangerth@ticam.utexas.edu> writes:

| > |     However, just for the record: I fail to see how this can be
| > |     made legal: when you write A<n>::B to denote the template
| > |     type, B is a template dependent type, and one would think
| > |     one has to write a "typename" somewhere. But then we have
| > |       typename A<n>::B
| > |     which is not the name of a type, but of a template. I don't
| > |     know what the standard says here, but I don't see a way to
| > |     make it legal in any case.
| > 
| > This case seems to be forgotten by the standard.  I think the
| > following should make GCC happy.
| > 
| >   template<int n>
| >      struct D  {
| >        enum { 
| >          v = C<A<n>::template B>::v
| >        };
| >      };
| > 
| > Note the "template" keyword in front of B.
| 
| Right, it does.
| 
| 
| > The closest you can find in the standard is 14.2/
| > 
| >     4
| >       When the name of a member template specialization appears after . or
|                                            ^^^^^^^^^^^^^^
| I think this is why you said it seems to have been forgotten? After all it 
| speaks about a specialization, which it is not in the code you posted.

Right.

| If you are sure that this is an oversight,

I didn't intend to speak for the committee -- I can't and I don't want
to.

But I find the above wording overly restrictive.

| why don't you bring it up with 
| the ISO committee?

Already done ;-)

-- Gaby


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