↑書いて思いつきましたが、型パラメータになるための要件を列挙したインターフェースもどき?なんてどうでしょうか。

VectorElement is parameter : Object //継承する必要があるクラスやインターフェースを列挙
{
public:
 constructor: ( ); //引数無しのコンストラクタが必要
class public:
 operator >: (X, Y: VectorElement) -> Boolean; // 自身の型を引数に取る ">" 演算子が必要
};

で、総称の定義でこれを明示する、と。

Vector is generic<Element is VectorElement> class { ...

そうすればVectorElementで書かれた要件を満たしたクラスのみVector<Integer>みたいにできる、と。
Vectorの定義の中ではVectorElementで書かれた要件のみ使える、と。
型チェックが楽になりませんか?…面倒くさいかも。

無知を承知で提案しているので、どうぞ叩いて下さい。

同時に、書きながら思った別の提案…
・コンストラクタは型名ではなく予約語"constructor"を使うことにしませんか?型名がメンバー名を汚染しなくて済みます。
・Vector<Vector<Integer>>が通るように、">>"演算子か、型パラメータを囲む"<" ">"をどちらか変えませんか?