Гарантируют ли выровненные типы буферов в boost::endian отсутствие заполнения между ними?

#c #boost #padding #endianness #binary-data

Вопрос:

В boost::endian doc мы можем найти, что:

 struct S {
  big_uint16_ut a;
  big_uint32_ut b;
};
 

это портативный способ выразить то же самое, что:

 struct S {
  uint16_t a; // big endian
  uint32_t b; // big endian
} __attribute__ ((packed));
 

Я хотел бы использовать эту библиотеку для «анализа» двоичных данных, но я сомневаюсь. Действительно ли гарантируется, что между объектами типов не добавляется заполнение boost::endian::big_*_ut ? Я немного покопался в реализации, и эти типы являются просто классами с массивами char s внутри. Есть ли в стандарте какое-либо правило, гласящее, что между такими членами не будет добавляться никаких дополнений?

Комментарии:

1. ну, там прямо так и написано, не так ли? Если об этом говорится в документации Boost, то вы можете предположить, что они заставили его работать со всевозможными различными компиляторами.