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