This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: c++/9222: compiler crash in nested, self-referential template
- From: bangerth at dealii dot org
- To: gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, nobody at gcc dot gnu dot org, tkarkanis at aw dot sgi dot com
- Date: 7 Jan 2003 23:34:02 -0000
- Subject: Re: c++/9222: compiler crash in nested, self-referential template
- Reply-to: bangerth at dealii dot org, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, nobody at gcc dot gnu dot org, tkarkanis at aw dot sgi dot com, gcc-gnats at gcc dot gnu dot org
Synopsis: compiler crash in nested, self-referential template
State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Tue Jan 7 15:34:01 2003
State-Changed-Why:
This is already fixed in 3.2.2pre, 3.3pre and 3.4 mainline,
but I can confirm the crash for 3.2. With the first three
versions, you now get something along
tmp/g> /home/bangerth/bin/gcc-3.2.2-pre/bin/c++ -c gccbug.cpp
gccbug.cpp: In constructor `FinalIterator<T, Iterator,
Impl>::iterator::iterator(const Impl&) [with T = int, Iterator =
ForwardIterator, Impl = int]':
gccbug.cpp:30: instantiated from here
gccbug.cpp:21: no type named `iterator' in `struct ForwardIterator'
gccbug.cpp:21: no matching function for call to `ForwardIterator::iterator<int,
FinalIterator<int, ForwardIterator, int>::iterator, int>::iterator()'
gccbug.cpp:5: candidates are: ForwardIterator::iterator<int, FinalIterator<int,
ForwardIterator, int>::iterator, int>::iterator(const
ForwardIterator::iterator<int, FinalIterator<int, ForwardIterator,
int>::iterator, int>&)
gccbug.cpp:8: ForwardIterator::iterator<T, Final,
Impl>::iterator(const Impl&) [with T = int, Final = FinalIterator<int,
ForwardIterator, int>::iterator, Impl = int]
As you mentioned, the bug goes away when you uncomment
the one line: the original code is illegal, while the
second line is the legal one, so you need to write that
one (the class name is only an alias of the class name
+ all its template arguments for the present class, not
for the base class). The error was thus an ICE-on-illegal,
but as mentioned this is already fixed.
Thanks
W.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9222