This is the mail archive of the
mailing list for the libstdc++ project.
Re: list <T>::iterator _it ; fails to compile
On Fri, Aug 13, 2004 at 01:54:48PM +0100, Jonathan Wakely wrote:
> On Fri, Aug 13, 2004 at 02:36:01PM +0200, Arnaud Gardelein wrote:
> > Hello !
> > It seems that when I try to create a list iterator in a template class
> > with "list<T>::iterator _it ;", gcc-3.4.0 does not like that, whereas
> > version 3.2.2 does (compilation details follows) :
> > gcc-3.4.0 :
> > test.cpp:9: error: expected `;' before "_it"
> > gcc-3.2.2 :
> > test.cpp:9: warning: `typename std::list<T, std::allocator<_CharT>
> > >::iterator' is implicitly a typename
> > test.cpp:9: warning: implicit typename is deprecated, please see the
> > documentation for details
> > What's wrong ?
> GCC 3.3.2 tells you what's wrong with the code and tells you to check
> the docs to understand it. If you'd fixed the code to remove the
> warning it would have made it compile with 3.4
> The implicit typename feature that was deprecated in 3.3 was removed
> from 3.4, so the code is no longer accepted.
> You need to say "typename" before referring to a type that is dependent
> on a template parameter, to tell the compiler that the name refers to
> a type and not something else (such as a variable or a function).
Sorry for the rather angry-sounding reply, I'm having a bad day!
This page says that the feature has been deprecated, although doesn't
really give a lot of help understanding it if you don't know what it
You basically have to say
typename std::list<T, std::allocator<_CharT> > > >::iterator
std::list<T, std::allocator<_CharT> > > >::iterator
"There is no governor anywhere. You are all absolutely free."
- Cagliostro the Great
"The Schroedinger's Cat Trilogy" RAW