diff --git a/include/boost/mpl/aux_/integral_wrapper.hpp b/include/boost/mpl/aux_/integral_wrapper.hpp index 6b5962e..6bc05f7 100644 --- a/include/boost/mpl/aux_/integral_wrapper.hpp +++ b/include/boost/mpl/aux_/integral_wrapper.hpp @@ -77,7 +77,7 @@ struct AUX_WRAPPER_NAME // functions that return objects of both arithmetic ('int', 'long', // 'double', etc.) and wrapped integral types (for an example, see // "mpl/example/power.cpp") - operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast(this->value); } + BOOST_CONSTEXPR operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast(this->value); } }; #if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) diff --git a/include/boost/mpl/bool.hpp b/include/boost/mpl/bool.hpp index f4bb485..0a6180c 100644 --- a/include/boost/mpl/bool.hpp +++ b/include/boost/mpl/bool.hpp @@ -26,7 +26,7 @@ template< bool C_ > struct bool_ typedef integral_c_tag tag; typedef bool_ type; typedef bool value_type; - operator bool() const { return this->value; } + BOOST_CONSTEXPR operator bool() const { return this->value; } }; #if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) diff --git a/include/boost/mpl/string.hpp b/include/boost/mpl/string.hpp index c62d8ab..345918f 100644 --- a/include/boost/mpl/string.hpp +++ b/include/boost/mpl/string.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include @@ -59,7 +59,7 @@ namespace boost { namespace mpl #define BOOST_MPL_MULTICHAR_LENGTH(c) \ (std::size_t)((c0xffffff)+(c>0xffff)+(c>0xff)+1)) - #if defined(BOOST_LITTLE_ENDIAN) && defined(__SUNPRO_CC) + #if defined(BOOST_ENDIAN_LITTLE_BYTE) && defined(__SUNPRO_CC) #define BOOST_MPL_MULTICHAR_AT(c,i) \ (char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i)))) diff --git a/test/bool.cpp b/test/bool.cpp index 8fad753..e023c0c 100644 --- a/test/bool.cpp +++ b/test/bool.cpp @@ -16,11 +16,18 @@ #include +#if defined(BOOST_NO_CXX11_CONSTEXPR) +#define CONSTEXPR_BOOL_TEST(c) +#else +#define CONSTEXPR_BOOL_TEST(c) { static_assert(bool_() == c, "Constexpr for bool_ failed"); } +#endif + #define BOOL_TEST(c) \ { MPL_ASSERT(( is_same< bool_::value_type, bool > )); } \ { MPL_ASSERT(( is_same< bool_, c##_ > )); } \ { MPL_ASSERT(( is_same< bool_::type, bool_ > )); } \ { MPL_ASSERT_RELATION( bool_::value, ==, c ); } \ + CONSTEXPR_BOOL_TEST(c) \ BOOST_TEST( bool_() == c ); \ /**/ diff --git a/test/integral_wrapper_test.hpp b/test/integral_wrapper_test.hpp index 4a08d3c..be31d50 100644 --- a/test/integral_wrapper_test.hpp +++ b/test/integral_wrapper_test.hpp @@ -28,6 +28,12 @@ /**/ #endif +#if defined(BOOST_NO_CXX11_CONSTEXPR) +#define CONSTEXPR_INTEGRAL_TEST(T, i) +#else +#define CONSTEXPR_INTEGRAL_TEST(T, i) { static_assert(T() == i, "Constexpr for integral constant failed"); } +#endif + #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582)) // agurt 20/nov/06: see http://article.gmane.org/gmane.comp.lib.boost.devel/151065 #define INTEGRAL_WRAPPER_TEST(unused1, i, T) \ @@ -39,6 +45,7 @@ { MPL_ASSERT(( is_same< next< borland_tested_type >::type, WRAPPER(T,i+1) > )); } \ { MPL_ASSERT(( is_same< prior< borland_tested_type >::type, WRAPPER(T,i-1) > )); } \ { MPL_ASSERT_RELATION( (borland_tested_type::value), ==, i ); } \ + CONSTEXPR_INTEGRAL_TEST(borland_tested_type, i) \ INTEGRAL_WRAPPER_RUNTIME_TEST(i, T) \ } \ /**/ @@ -49,6 +56,7 @@ { MPL_ASSERT(( is_same< next< WRAPPER(T,i) >::type, WRAPPER(T,i+1) > )); } \ { MPL_ASSERT(( is_same< prior< WRAPPER(T,i) >::type, WRAPPER(T,i-1) > )); } \ { MPL_ASSERT_RELATION( (WRAPPER(T,i)::value), ==, i ); } \ + CONSTEXPR_INTEGRAL_TEST(WRAPPER(T,i), i) \ INTEGRAL_WRAPPER_RUNTIME_TEST(i, T) \ /**/ #endif