C ++, статически определять базовые классы с разными адресами?

Если у меня есть производный класс с несколькими базами, каждый указатель this для каждой базы будет отличаться от указателя этого указателя производного объекта, за исключением одного. Учитывая два типа в иерархии наследования, я хотел бы во время компиляции определить, используют ли они один и тот же указатель this. Нечто подобное должно работать, но это не так:

BOOST_STATIC_ASSERT(static_cast<Base1*>((Derived *)0xDEADBEEF) == (Derived*)0xDEADBEEF);

Потому что оно должно быть «интегральным константным выражением» и только целочисленные приведения разрешены в соответствии со стандартом (что глупо, потому что им нужна только информация времени компиляции, если не используется виртуальное наследование). Та же проблема возникает при попытке передать результаты в виде целочисленных параметров шаблона.

Лучшее, что я смог сделать, - это проверить при запуске, но мне нужна информация во время компиляции (чтобы заставить работать несколько глубоких шаблонов).

Ответы на вопрос(6)

Ваш ответ на вопрос