Starting in Clang 8.0 and GCC 8.0, alignof and __alignof return different values in same cases. Specifically alignof and _Alignof return the minimum alignment for a type, where as __alignof returns the preferred alignment. libc++ currently uses __alignof but means to use alignof. See llvm.org/PR39713
This patch introduces the macro _LIBCPP_ALIGNOF so we can control which spelling gets used.
This patch does not introduce any ABI guard to provide the old behavior with newer compilers. However, if we decide that is needed, this patch makes it trivial to implement.
I think we should commit this change immediately, and decide what we want to do about the ABI afterwards.
Can you indent nested #defines? I find it very difficult to read our PP code because it often lacks indentation.