Hi jlh,
>But still I don't get why this is wrong. Is only because the compiler can't tell whether it's a typename or something else at parse time?
Correct, compilers are not allowed to ASSUME (as per ISO 14882) that it is a typename.
Compilers that do make that ASSUMPTION are in violation of ISO 14882. (Which is why it is wrong.)
GCC works hard to be compliant. EDG is often lauded as a very, very compliant compiler (even implementing the dusty-hard-to-reach ISO 14882 items). MSVC comes up short in this regard. I'm out of experience with Metrowerks or Borland these days, but I have fond memories of them.
HTH, --Eljay