1

簡単な例を次に示します。

class A
{
    enum {OFFSET = 4};  //Due to packing

    bool m_bool;
};

template<class T>
class B : public A
{
    MyClass<T> m_class;
};

クラス A が MyClass の基本クラスを介して MyClass の機能のサブセットを利用できると仮定すると、クラス A のインスタンスに対する 'm_class' の場所に関する仮定を検証したいと思います。

クラス B のメンバー関数内から次のコードを試しましたが、エラーが発生します (「予期された定数式」)。

static_assert ((byte *)nullptr + OFFSET ==
    (byte *)&((B<T> *)nullptr)->m_class, "Error 'm_class' incorrectly located!");

これは、現在のバージョンのコンパイラにとっては野心的すぎるのでしょうか?

4

0 に答える 0