aren't specialized templates templates?
Martin Sebor
sebor@roguewave.com
Mon Feb 14 00:17:00 GMT 2005
Tim Janik wrote:
> hi all.
>
> the code snippet below is extracted from a much more
> complicated piece of code. basically the problem is that
> g++ (3.3 and 3.4) demand different typedef syntax inside
> template bodies, depending on whether full or partial
> specialization is used.
>
> is this really the correct behaviour and standard conform?
> (to me it seems, line20 should still be considered part of
> a template and thus accept the "typename")
Unfortunately, it is the correct behavior. But because it makes
typename hard to use, a relaxation of the rule that would make
your code well-formed is now being considered. For the status
of this proposed change see:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#382
Martin
>
> --------------------snip---------------------
> template<class C>
> struct Base {
> typedef C* Iterator;
> };
>
> template<class C, class D>
> struct Derived : Base<D> {
> typedef typename Base<D>::Iterator Iterator;
> };
>
> #define BASE_ITER(BASE) typename BASE :: Iterator
>
> template<class D>
> struct Derived<char, D> : Base<D> {
> typedef BASE_ITER (Base<D>) Iterator; // line15
> };
>
> template<>
> struct Derived<char, int> : Base<int> {
> typedef BASE_ITER (Base<int>) Iterator; // line20
> };
>
> // test.cc:20: error: using `typename' outside of template
> --------------------snip---------------------
>
>
> ---
> ciaoTJ
More information about the Gcc-bugs
mailing list