C++以外の言語を考えたほうがいいんじゃない?
typenameが必要な理由だって、そのcontext sensitiveな文法から来ているんだし。