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