Если, например, тип стандартного макета, трудно понять, как реализация должна быть ограничена в этом смысле. Может ли реализация использовать какой-то динамический поиск для базового объекта, например? в теории, я думаю, да. (Опять же, на практике мне трудно понять, какая польза от смещения должна быть статической и иметь дополнительные издержки)
Например:
Нестатические члены данных (не объединяющего) класса с одинаковым доступом
контроль (пункт 14) распределяются таким образом, чтобы у более поздних членов
адреса внутри объекта класса. Порядок размещения нестатических
члены данных с разным контролем доступа не определены (п. 14).
Требования выравнивания реализации могут привести к двум соседним элементам
не распределяются сразу после друг друга; так может
требования к пространству для управления виртуальными функциями (13.3) и
виртуальные базовые классы (13.1).
Стандарт ничего не гарантирует, например, в отношении виртуальных базовых классов.
Объект тривиально копируемого или стандартного типа (6.7) должен
занимают смежные байты памяти.
Опять же, это относится только к подмножеству, поэтому стандарт здесь не сильно помогает. (например, объект с виртуальной функцией нетривиален для копирования).
Также см. Вендор, реализовавший макрос offsetof https://en.cppreference.com/w/cpp/types/offsetof
Несмотря на то, что только для переменных-членов, даже здесь, это ясно дает понять, что не так много всего.
Как видите, большинство вещей остается на усмотрение реализации.
Также см. Этот ответ (не тот же вопрос, но связанный): C ++ Стандарт на адрес унаследованных членов