Используйте alignas для выравнивания структуры

В следующей структуре:

struct alignas(?) test
{
int32_t f1; // 4 bytes
int8_t f2; // 1 byte
int8_t f3; // 1 byte
};

Как пользоваться alignas чтобы sizeof(test) будет ровно 6 байт?

alignas(1) не принимается компилятором (gcc, msvc, clang) (ошибка вроде: error: requested alignment is less than minimum alignment of 4 for type 'test').

UPD. Этот вариант работает нормально, конечно:

#pragma pack(push, 1)

struct alignas(?) test
{
int32_t f1; // 4 bytes
int8_t f2; // 1 byte
int8_t f3; // 1 byte
};

#pragma pack(pop)

Но есть ли способ сделать это без препроцессора, используя только стандартный C ++ 11/14?

2

Решение

Нет. alignas только позволяет сделать выравнивание более строгим, и только до максимального выравнивания стандартных типов.

Стандарт не предусматривает механизма смещения типов.

3

Другие решения

Других решений пока нет …