в любой реализации, однако.

уктура обеспечиваетstd::aligned_storage typedef, по крайней мере, в соответствии сtypecppreferenceПредоставляет тип typedef члена, который представляет собой PODType, подходящий для использования в качестве неинициализированного хранилища для любого объекта, размер которого не превышает Len и требование выравнивания которого является делителем Align.:

Значение по умолчанию Align является самым строгим (самым большим) требованием выравнивания для любого объекта, размер которого не превышает Len.

В частности, со значением по умолчанию

, соответственно выровненный дляAlignлюбой объект чей размер не более лен.Обратите внимание, что нет никаких предупреждений или исключений для выровненных типов (и в любом случае платформа, которую я использую, gcc, поддерживает, по крайней мере, некоторые выровненные типы).

Как на самом деле может работать такая реализация? Для удовлетворения требования «любой объект» может показаться, что:

На платформе, где

&nbsp;для типовalignof(T) <= sizeof(T), надо всегда соответствовать примерноT&nbsp;байты, поскольку объект размеромLen&nbsp;может иметь выравнивание доLen, Конечно, это будет тратить много памяти для большихLenНа платформе, гдеLen!&nbsp;может быть больше чемalignof(T)Я не понимаю, как это вообще может быть реализовано. Тем не менее, это неsizeof(T)ясно для меня&nbsp;что такой тип может даже существовать.На основе

мое тестированиепо умолчанию&nbsp;ценности,Align&nbsp;просто всегда выравнивается до 16, независимо от длины Это означает, что хранилищеgccне&nbsp;подходит дляЛюбые&nbsp;объект, но только объекты фундаментального выравнивания (&nbsp;на этой платформе).alignof(max_align_t) == 16в