Ваш класс Object
не является стандартным макетом, потому что его (прямые и косвенные) не статичные c члены данных не все объявлены в одном классе.
Поэтому, в значительной степени, единственная гарантия у вас есть то, что члены, объявленные в одном и том же классе и с одним и тем же спецификатором доступа, упорядочены в соответствии с порядком их объявления:
r < g < b
x < y < z
и что порядок подобъектов подобъектов является согласованным, то есть если data < r
также data < b
и т. Д.
(имена должны представлять адреса здесь.)
Я не думаю, что есть какие-либо другие гарантии по стандарту C ++, но ABI, используемый вашей платформой, укажет это более подробно.
Кстати, поскольку класс не является стандартным макетом, offsetof
имеет неопределенное поведение в C ++ 14 (и только условно - поддерживается с C ++ 17).
Утверждения не должны выполняться, даже если требования к упорядочению были выполнены, поскольку между подобъектами может быть заполнение.