C11 introduced <stdalign.h>, which defined the macros alignas to _Alignas and alignof to _Alignof. Additionally, the feature test macros __alignas_is_defined and __alignof_is_defined are defined to 1.
C23 introduces alignas and alignof as keywords, and defines that <stdalign.h> "defines no content".
C++23 (quite likely unaware of the change in C23) states that <stdalign.h> is "the same as the C standard library include", with the one difference that it "does not define a macro named alignas".
Do I understand this correctly that, in C++, <stdalign.h> does define alignof as a macro, and defines __alignas_is_defined / __alignof_is_defined to 1, whereas in C23 it does none of these things anymore?
<cstdalign>. en.cppreference.com/w/cpp/header/cstdalign.htmlalignasandalignof. C was cautious about introducing new names as keywords because of the danger of breaking existing code innocently using the keyword as an identifier. The names_Alignofand_Alignasare in the namespace reserved for the "implementation", so anyone using those names before they became keywords had only themselves to blame. The header allowed you to use the lower-case names (alignofandalignas), but didn't break existing compliant code. […continued…]bool,true,false,static_assertandthread_localare now keywords, too, as well asalignofandalignas. There are a number of other new keywords. The underscore-capital names are documented as being obsolescent, but continue to be supported for backwards compatibility.