vladon
vladon

Reputation: 8401

Use alignas to align struct

In the following struct:

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

How to use alignas so that sizeof(test) would be exactly 6 bytes?

alignas(1) is not accepted by compiler (gcc, msvc, clang) (error like: error: requested alignment is less than minimum alignment of 4 for type 'test').

UPD. This variant works OK, of course:

#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)

But is there a way to do it without preprocessor using only standard C++11/14?

Upvotes: 3

Views: 1852

Answers (1)

rici
rici

Reputation: 241771

No. alignas only lets you make alignment stricter, and only up to the maximum alignment of standard types.

The standard provides no mechanism for misaligning types.

Upvotes: 4

Related Questions