I figured, but it's easier to say MSVC2005 since it's the actual product name.
Although, now that you think about it, the compiler does parse the header, and if a template class, or something else the compiler doesn't know about when it parses it, it might need a little help.
I'm suspecting it needs typename because when it first parses the header, it doesn't know the type, and so you will have to tell it it's a type, pretty much like the compiler doesn't know about external variables.
I think we can agree to, then, that if they wanted to, typename isn't required, but they did make it to ease it for compiler or something, so it can parse the header directly instead of doing a pass when it knows the type of T.