EDIT: Я misremembered цитата первоначально, компилятор имеет право сделать это за 9.2/14
:
Нестатические элементов данных (неединичный) класс с тем же доступом элемент управления (раздел 11) выделяются так, что более поздние члены имеют более высокие адреса в объекте класса. Порядок распределения нестатических элементов данных с различным контролем доступа не указан (11). Требования к выравниванию реализации могут приводить к тому, что два соседних элемента не должны выделяться сразу друг за другом; так может требования к пространству для управления виртуальными функций (10.3) и виртуальных базовых классов (10.1)
Что он не может сделать это перезаказ атрибутами с тем же спецификатором доступа.
Это говорит, что я не знаю никакой реализации, позволяющей переупорядочивать атрибуты даже по спецификаторам доступа.
Компилятор не имеет права изменять порядок в каждой спецификации доступа. Порядок каждой спецификации спецификации доступа не указан. Компилятору разрешено делать то, что демонстрирует O.P. – John
+1: Я всегда задавался вопросом, почему это в Стандарте. –