diff --git a/include/boost/python/call.hpp b/include/boost/python/call.hpp index 234a25d0..3605a134 100644 --- a/include/boost/python/call.hpp +++ b/include/boost/python/call.hpp @@ -40,7 +40,10 @@ namespace boost { namespace python { # endif // CALL_DWA2002411_HPP #elif BOOST_PP_ITERATION_DEPTH() == 1 -# line BOOST_PP_LINE(__LINE__, call.hpp) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, call.hpp) +# endif # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/call_method.hpp b/include/boost/python/call_method.hpp index 474552e3..dd6a67af 100644 --- a/include/boost/python/call_method.hpp +++ b/include/boost/python/call_method.hpp @@ -39,7 +39,10 @@ namespace boost { namespace python { # endif // CALL_METHOD_DWA2002411_HPP #elif BOOST_PP_ITERATION_DEPTH() == 1 -# line BOOST_PP_LINE(__LINE__, call_method.hpp) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, call_method.hpp) +# endif # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/class.hpp b/include/boost/python/class.hpp index 999632bf..4974ec86 100644 --- a/include/boost/python/class.hpp +++ b/include/boost/python/class.hpp @@ -47,8 +47,14 @@ # include # include -# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) || BOOST_WORKAROUND(__GNUC__, < 3) +# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) \ + /* pro9 reintroduced the bug */ \ + || (BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) \ + || BOOST_WORKAROUND(__GNUC__, < 3) + # define BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING 1 + # endif # ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING diff --git a/include/boost/python/detail/is_xxx.hpp b/include/boost/python/detail/is_xxx.hpp index 0faea999..e6fb3f0b 100644 --- a/include/boost/python/detail/is_xxx.hpp +++ b/include/boost/python/detail/is_xxx.hpp @@ -14,36 +14,39 @@ # include # include -# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \ -template \ -struct is_##name \ -{ \ - typedef char yes; \ - typedef char (&no)[2]; \ - \ - static typename add_reference::type dummy; \ - \ - template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \ - static yes test( \ - qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \ - ); \ - \ - template \ - static no test(U&, ...); \ - \ - BOOST_STATIC_CONSTANT( \ - bool, value \ - = !is_reference::value \ - & (sizeof(test(dummy, 0)) == sizeof(yes))); \ - \ - typedef mpl::bool_ type; \ +# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \ +template \ +struct is_##name \ +{ \ + typedef char yes; \ + typedef char (&no)[2]; \ + \ + static typename add_reference::type dummy; \ + \ + struct helpers \ + { \ + template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \ + static yes test( \ + qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \ + ); \ + \ + template \ + static no test(U&, ...); \ + }; \ + \ + BOOST_STATIC_CONSTANT( \ + bool, value \ + = !is_reference::value \ + & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \ + \ + typedef mpl::bool_ type; \ }; # else # define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \ template \ -struct is_##name : mpl::false_ \ +struct is_##name : mpl::false_ \ { \ }; \ \ @@ -51,7 +54,7 @@ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \ struct is_##name< \ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \ > \ - : mpl::true_ \ + : mpl::true_ \ { \ }; diff --git a/include/boost/python/detail/result.hpp b/include/boost/python/detail/result.hpp index bb66f13a..b70eb557 100755 --- a/include/boost/python/detail/result.hpp +++ b/include/boost/python/detail/result.hpp @@ -88,7 +88,10 @@ result(X const&, short = 0) { return 0; } /* --------------- function pointers --------------- */ #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER -# line BOOST_PP_LINE(__LINE__, result.hpp(function pointers)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, result.hpp(function pointers)) +# endif # define N BOOST_PP_ITERATION() @@ -108,7 +111,10 @@ boost::type* result(R (*pf)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)), int = 0) # include BOOST_PP_ITERATE() #elif BOOST_PP_ITERATION_DEPTH() == 2 -# line BOOST_PP_LINE(__LINE__, result.hpp(pointers-to-members)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, result.hpp(pointers-to-members)) +# endif // Inner over arities # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/detail/target.hpp b/include/boost/python/detail/target.hpp index 5a3d490d..d75b34f4 100644 --- a/include/boost/python/detail/target.hpp +++ b/include/boost/python/detail/target.hpp @@ -39,7 +39,10 @@ T& (* target(R (T::*)) )() { return 0; } /* --------------- function pointers --------------- */ #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER -# line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers)) +# endif # define N BOOST_PP_ITERATION() @@ -59,7 +62,10 @@ BOOST_PP_IF(N, A0, void)(* target(R (*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A))) )() # include BOOST_PP_ITERATE() #elif BOOST_PP_ITERATION_DEPTH() == 2 -# line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members)) +# endif // Inner over arities # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/object/make_holder.hpp b/include/boost/python/object/make_holder.hpp index 91a0d455..87feb927 100644 --- a/include/boost/python/object/make_holder.hpp +++ b/include/boost/python/object/make_holder.hpp @@ -45,7 +45,10 @@ template struct make_holder; # endif // MAKE_HOLDER_DWA20011215_HPP #elif BOOST_PP_ITERATION_DEPTH() == 1 -# line BOOST_PP_LINE(__LINE__, make_holder.hpp) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, make_holder.hpp) +# endif # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/object/pointer_holder.hpp b/include/boost/python/object/pointer_holder.hpp index 8033c2e6..42ad9df4 100644 --- a/include/boost/python/object/pointer_holder.hpp +++ b/include/boost/python/object/pointer_holder.hpp @@ -136,7 +136,10 @@ void* pointer_holder_back_reference::holds(type_info dst_t) /* --------------- pointer_holder --------------- */ #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1 -# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp) +# endif # define N BOOST_PP_ITERATION() @@ -153,7 +156,10 @@ void* pointer_holder_back_reference::holds(type_info dst_t) /* --------------- pointer_holder_back_reference --------------- */ #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2 -# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference)) +# endif # define N BOOST_PP_ITERATION() diff --git a/include/boost/python/object/value_holder.hpp b/include/boost/python/object/value_holder.hpp index 89e52352..f326821c 100644 --- a/include/boost/python/object/value_holder.hpp +++ b/include/boost/python/object/value_holder.hpp @@ -103,7 +103,10 @@ void* value_holder_back_reference::holds( // --------------- value_holder --------------- #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1 -# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder)) +# endif # define N BOOST_PP_ITERATION() @@ -122,7 +125,10 @@ void* value_holder_back_reference::holds( // --------------- value_holder_back_reference --------------- #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2 -# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder_back_reference)) +# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ + && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) +# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder_back_reference)) +# endif # define N BOOST_PP_ITERATION()