Index: libcxx/include/cstddef =================================================================== --- libcxx/include/cstddef +++ libcxx/include/cstddef @@ -25,7 +25,7 @@ ptrdiff_t size_t - max_align_t + max_align_t // C++11 nullptr_t byte // C++17 @@ -49,12 +49,8 @@ using ::ptrdiff_t; using ::size_t; -#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) || \ - defined(__DEFINED_max_align_t) || defined(__NetBSD__) -// Re-use the compiler's max_align_t where possible. +#if !defined(_LIBCPP_CXX03_LANG) using ::max_align_t; -#else -typedef long double max_align_t; #endif template struct __libcpp_is_integral { enum { value = 0 }; }; Index: libcxx/include/new =================================================================== --- libcxx/include/new +++ libcxx/include/new @@ -226,9 +226,19 @@ _LIBCPP_BEGIN_NAMESPACE_STD +#if defined(_LIBCPP_CXX03_LANG) +union __libcpp_max_align_t { + void * __f1; + long long int __f2; + long double __f3; +}; +#endif + _LIBCPP_CONSTEXPR inline _LIBCPP_INLINE_VISIBILITY bool __is_overaligned_for_new(size_t __align) _NOEXCEPT { #ifdef __STDCPP_DEFAULT_NEW_ALIGNMENT__ return __align > __STDCPP_DEFAULT_NEW_ALIGNMENT__; +#elif defined(_LIBCPP_CXX03_LANG) + return __align > alignment_of<__libcpp_max_align_t>::value; #else return __align > alignment_of::value; #endif Index: libcxx/include/stddef.h =================================================================== --- libcxx/include/stddef.h +++ libcxx/include/stddef.h @@ -51,12 +51,6 @@ using std::nullptr_t; } -// Re-use the compiler's max_align_t where possible. -#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T) && \ - !defined(__DEFINED_max_align_t) && !defined(__NetBSD__) -typedef long double max_align_t; -#endif - #endif #endif // _LIBCPP_STDDEF_H