Defect Report見てきた。
dkuugはなんか重い。
comeaucomputingに置いてある奴の方がアクセスが早いような気がしたんで、リンクはそっちに貼る。

templateキーワードを使った素敵な修辞はもちろん見当たらなかったけど、
>>62 の
> GCCとVCのコンパイラの反応の違いは,恐らくsuper classの指定の部分を
> クラスの内部と見るか外部と見るかの実装の相違から来ているものと邪推します.
これに関連するやつが見つかったのでここに記しておきます。

http://www.comeaucomputing.com/iso/cwg_defects.html#432
によると、injected class name(今回の件では>>57,>>62の言っているものにあたる)の
宣言地点はクラス定義の開き括弧のすぐ後だということになるらしい。
決まったのは2003/10のミーティングということなので、割と新しい話題のようだ。

ということは、
> struct Y: X<Y,T>{};
これで通るのが標準化委員会の意向ということになる。

逆に
template< typename T > struct A {};
template< typename T > struct B : A< B > {};
これは通らなくなり、2行目を
template< typename T > struct B : A< B< T > > {};
とする必要がありそうだ。
実際にやってみると、VC(Toolkit 2003)では両方OKで、gcc(3.3.1)では上だけエラーになる。
これはこれでまた一悶着起こりそうな予感が・・・。

そもそも"injected class name"がらみの問題が多すぎて、
本当でこれでいいのか、と心配になった。