C ++ 0x предоставляет новую конструкцию (в [meta.type.synop] 20.7.6.6 другие преобразования ):
std::aligned_storage<Length, Alignment>
, чтонасколько я помню, всегда будет правильно выровнен.
Второй параметр является необязательным, и по умолчанию применяется самое строгое требование (так что всегда можно не точно его задавать, но вы можете упаковать свои типы).более компактно, если вы хотите попробовать).
Помимо ошибок , компилятор обязан выполнить это требование.Если у вас нет C ++ 0x, это можно найти в пространстве имен tr1
или в Boost
.
. Вы единственный, кто может проверить, что ваш конкретный компилятор выполняет этот запрос:)
Примечание: для gcc-4.3.2
это реализовано как:
template<std::size_t _Len, std::size_t _Align = /**/>
struct aligned_storage
{
union type
{
unsigned char __data[_Len];
struct __attribute__((__aligned__((_Align)))) { } __align;
};
};