複数のベースを持つ派生クラスがある場合、各ベースの各 this ポインターは、1 つを除いて、派生オブジェクトの this ポインターとは異なります。継承階層に 2 つの型がある場合、それらが同じ this ポインターを共有しているかどうかをコンパイル時に検出したいと考えています。このようなものは機能するはずですが、機能しません:
BOOST_STATIC_ASSERT(static_cast<Base1*>((Derived *)0xDEADBEEF) == (Derived*)0xDEADBEEF);
それは「整数定数式」である必要があり、標準に従って整数キャストのみが許可されているためです(仮想継承が使用されていない場合、コンパイル時の情報のみが必要なため、これはばかげています)。結果を整数のテンプレート パラメータとして渡そうとすると、同じ問題が発生します。
私ができる最善のことは、起動時にチェックすることですが、コンパイル中に情報が必要です (いくつかの深いテンプレートハッカーを機能させるため)。