C ++, статически определять базовые классы с разными адресами?
Если у меня есть производный класс с несколькими базами, каждый указатель this для каждой базы будет отличаться от указателя этого указателя производного объекта, за исключением одного. Учитывая два типа в иерархии наследования, я хотел бы во время компиляции определить, используют ли они один и тот же указатель this. Нечто подобное должно работать, но это не так:
BOOST_STATIC_ASSERT(static_cast<Base1*>((Derived *)0xDEADBEEF) == (Derived*)0xDEADBEEF);
Потому что оно должно быть «интегральным константным выражением» и только целочисленные приведения разрешены в соответствии со стандартом (что глупо, потому что им нужна только информация времени компиляции, если не используется виртуальное наследование). Та же проблема возникает при попытке передать результаты в виде целочисленных параметров шаблона.
Лучшее, что я смог сделать, - это проверить при запуске, но мне нужна информация во время компиляции (чтобы заставить работать несколько глубоких шаблонов).