diff --git a/include/boost/atomic/detail/type_traits/alignment_of.hpp b/include/boost/atomic/detail/type_traits/alignment_of.hpp index 8b0ecda..faef7d1 100644 --- a/include/boost/atomic/detail/type_traits/alignment_of.hpp +++ b/include/boost/atomic/detail/type_traits/alignment_of.hpp @@ -15,7 +15,16 @@ #define BOOST_ATOMIC_DETAIL_TYPE_TRAITS_ALIGNMENT_OF_HPP_INCLUDED_ #include -#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_BASIC_HDR_TYPE_TRAITS) + +#if defined(BOOST_ATOMIC_DETAIL_NO_CXX11_BASIC_HDR_TYPE_TRAITS) ||\ + (defined(BOOST_GCC) && (BOOST_GCC+0) < 80100) ||\ + (defined(BOOST_CLANG) && !defined(__apple_build_version__) && (__clang_major__+0) < 8) ||\ + (defined(BOOST_CLANG) && defined(__apple_build_version__) && (__clang_major__+0) < 9) +// For some compilers std::alignment_of gives the wrong result for 64-bit types on 32-bit targets +#define BOOST_ATOMIC_DETAIL_NO_CXX11_STD_ALIGNMENT_OF +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_STD_ALIGNMENT_OF) #include #else #include @@ -29,7 +38,7 @@ namespace boost { namespace atomics { namespace detail { -#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_BASIC_HDR_TYPE_TRAITS) +#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_STD_ALIGNMENT_OF) using std::alignment_of; #else using boost::alignment_of;