>>641
テンプレート引数に出てくるtypenameとclassは同じ意味だけど、
受け取った型から内部の型を取り出すときのキーワードとしては違いがあるみたい。

struct A{typedef int I;};
struct B{typedef B I;};

template<typename T>
struct C
{
typedef typename T::I J;
// typedef class T::I J; // NG for A, OK for B
};