diff --git a/include/boost/core/max_align.hpp b/include/boost/core/max_align.hpp index a16a82b..35d61d5 100644 --- a/include/boost/core/max_align.hpp +++ b/include/boost/core/max_align.hpp @@ -26,12 +26,16 @@ union max_align_t int i; long l; -#ifndef BOOST_NO_LONG_LONG +#if !defined(BOOST_NO_LONG_LONG) + boost::long_long_type ll; + #endif -#ifdef BOOST_HAS_INT128 +#if defined(BOOST_HAS_INT128) + boost::int128_type i128; + #endif float f; @@ -39,7 +43,9 @@ union max_align_t long double ld; #if defined(BOOST_HAS_FLOAT128) || defined(__SIZEOF_FLOAT128__) + __float128 f128; + #endif void* p; diff --git a/test/max_align_test.cpp b/test/max_align_test.cpp index a959161..6804576 100644 --- a/test/max_align_test.cpp +++ b/test/max_align_test.cpp @@ -8,6 +8,10 @@ #include #include +#if defined(BOOST_LIBSTDCXX_VERSION) && BOOST_LIBSTDCXX_VERSION < 40900 +# define BOOST_NO_STD_MAX_ALIGN_T +#endif + struct X { }; @@ -21,20 +25,26 @@ int main() BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); -#ifndef BOOST_NO_LONG_LONG +#if !defined(BOOST_NO_LONG_LONG) + BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); + #endif -#ifdef BOOST_HAS_INT128 +#if defined(BOOST_HAS_INT128) + BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); + #endif BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); -#ifdef BOOST_HAS_FLOAT128 +#if defined(BOOST_HAS_FLOAT128) || defined(__SIZEOF_FLOAT128__) + BOOST_TEST_GE( boost::core::max_align, boost::alignment_of<__float128>::value ); + #endif BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); @@ -43,7 +53,7 @@ int main() BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); BOOST_TEST_GE( boost::core::max_align, boost::alignment_of::value ); -#if !defined(BOOST_NO_CXX11_ALIGNOF) +#if !defined(BOOST_NO_CXX11_ALIGNOF) && !defined(BOOST_NO_STD_MAX_ALIGN_T) BOOST_TEST_EQ( boost::core::max_align, alignof( std::max_align_t ) );