typedefのtypename
このコードはVC++8.0でエラー(警告はC4346)になる。
template <typename T> class A { typedef std::vector<T>::iterator type; // エラー };
テンプレート引数が関わると、型メンバを指定するのにこんな風にtypenameが必要なときがある。
template <typename T> class A { typedef typename std::vector<T>::iterator type; // OK };
でも、typedefの次は型と決まっているわけで、制約する必要は無いのではないだろうか。他の例を見ると、継承元を指定する場合はtypenameをつけると返ってエラー(C2518)になる。
template <typename T> class A : public typename std::vector<T>::iterator // エラー { };