alignas specifier vs __attribute__(aligned), c++11
It seems from the GCC support status, alignment support is not fully supported in gcc 4.7, but it is for gcc 4.8. alignas
is also listed as a newly supported feature from the 4.8 release page.
Also, from the alignment support proposal (3.11):
A fundamental alignment is represented by an alignment less than or equal to the greatest alignment supported by the implementation in all contexts, which is equal to alignof(std::max_align_t) (18.1).
An extended alignment is represented by an alignment greater than alignof(std::max_align_t). It is implementation-defined whether any extended alignments are supported and the contexts in which they are supported (7.1.6). A type having an extended alignment requirement is an over-aligned type.
And from the same document (7.1.6):
if the constant expression evaluates to an extended alignment and the implementation does not support that alignment in the context of the declaration, the program is illformed
That might be part of the answer too. I don't have access to the full standard at the moment, someone should be able to confirm this.
As for the difference between __attribute__(aligned)
and alignas
, i don't think they are semantically different, but one is just a compiler extension while the other is fully defined by the standard.
To answer your last question, alignas
is only defined for:
alignas ( constant-expression )
alignas ( type-id )