テンプレート名と継承元
C++ではテンプレート名が型名になるという仕様があるのだが、
クラステンプレート名は型名 - meryngii.neta
これはなぜか継承元の指定では使えないらしい。
template <class T> struct A { }; template <class T> struct B //: A<B> // 1, NG : A< B<T> > // 2, OK { typedef A< B<T> > base1; // 3, OK typedef A<B> base2; // 4, OK };
VC8では1の部分のコードは通らないが、VC7までは使えたようだ。
http://www.ailight.jp/blog/sha256/archive/2005/08/04/9214.aspx
GCCはVC8と同じ挙動を示すので、言語仕様としてはこれが正しいのだろう。ただし理由は分からない。
この手の記法は自己言及的なテンプレートを使うときによく出てくる。
http://d.hatena.ne.jp/Cryolite/20040605