typenameって、「これは型名ですよ」とコンパイラに教える意味も
持ってるんじゃなかった?
(classの先行宣言と一緒=以前はclassで代用してたのかも)

とすれば、>>704の例だと
typename map<Key , Value>::iterator; // 先行宣言
map<Key , Value>::iterator it;
なら、どんなコンパイラでも(typenameというキーワードをサポートしていれば)
通りそうな気がするんだけど。

試してないけどね。