ISO C23 specification:
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf sections 6.5.3.4, 6.7.5, 7.15.
C++11 specification:
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf section 18.10.
POSIX specification:
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/stdalign.h.html
Portability problems fixed by Gnulib:
<stdalign.h> must be included before using
alignas or alignof. For example, GCC versions before 13 do not
support these keywords, which were standardized by C23.
On C23 and later platforms, <stdalign.h> has no effect and need
not be included.
(Gnulib-using code should not include
<stdalign.h> without also employing Gnulib’s now-deprecated
stdalign-h module.)
<stdalign.h> does not define alignof.
alignof macro returns too large values for
the types double and long long in GCC 4.7.0.
_Alignas and _Alignof keywords or macros.
This portability problem should not matter with code using this module,
as such code should use alignas and alignof instead.
<stdalign.h> defines the macros
__alignas_is_defined and
__alignof_is_defined to 1.
In C23, these macros are not defined.
This portability problem should not matter with code using Gnulib’s
alignasof module, as such code should use alignas and
alignof without checking these two macros. (Gnulib’s
now-deprecated stdalign-h module defines these two macros.)
alignas attribute in the
specifier-qualifier position of a member declaration.
Portability problems not fixed by Gnulib:
alignof must be a
parenthesized type. Recent versions of GCC support an extension in
which the operand can also be a unary expression, as with
sizeof. The Gnulib substitute does not support this extension.
alignof cannot be a structure type containing a
flexible array member.
alignas keyword or macro is not always supported.
Supported compilers include any compiler supporting C11 or later,
which includes GCC, IBM C, Sun C 5.9 and later,
and MSVC 7.0 and later.
alignas of auto variables (i.e.,
variables on the stack). They diagnose and ignore the alignment: Sun
C 5.11.
alignas
that are greater than 8: mingw.
alignas
to be a single integer constant, not an expression: MSVC 7.0 through
at least 10.0.
alignas. The bug is fixed in Sun C 5.15, also known as Oracle
Developer Studio 12.6 (2017).
alignas and alignof are reserved words;
they might be macros.