Recursive types and generic instantiations

C++で書くところのstruct A { vector<A> B; };がAdaでは出来ないのは、struct A { A B; };が出来ないルールがgenericにまで延長されているから(らしい、具体的にはimcomplete typeをgenericに渡せない)ですけれど、何故C++では出来るのでしょうか。あ、ちなみにAdaでもstruct A { vector<A> *B; }の形なら可能です。
言い換えると、Dでstruct A { A[] B; }が可能なのは動的配列が組み込み型だからで納得なのですが、vector<A>がAを含まないことをC++はどうやって保証してるのでしょうか。
いやclass T: X<T> {...};が可能な言語に何言ってんだと思われるかもしれませんが……。
ええと、つまり、C++0xでconcept, model, whereだのが加わっても、やっぱりC++のtemplateは展開してみるまでインスタンス化の成否が判らないままで、でもそのほうが実際嬉しいのは明らかっぽいわけで。
だからなんだ。AI05-0011-1での、Adaのgenericの文脈を保ったままで上記を実現できるようにするにはどーすりゃいいのよって議論が面白かっただけらしい。
仮に実現できたとしてもやたら冗長な記述を強いられそうなので、諦めてgrowableな動的配列ぐらい組み込みにしてくれそのほうがずっと嬉しいから、と思いました。