Skip to content

Commit 234ebad

Browse files
committed
pro9 workarounds; some ADL protection for is_xxx
[SVN r21529]
1 parent 11ee20f commit 234ebad

File tree

9 files changed

+79
-37
lines changed

9 files changed

+79
-37
lines changed

include/boost/python/call.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,10 @@ namespace boost { namespace python {
4040
# endif // CALL_DWA2002411_HPP
4141

4242
#elif BOOST_PP_ITERATION_DEPTH() == 1
43-
# line BOOST_PP_LINE(__LINE__, call.hpp)
43+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
44+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
45+
# line BOOST_PP_LINE(__LINE__, call.hpp)
46+
# endif
4447

4548
# define N BOOST_PP_ITERATION()
4649

include/boost/python/call_method.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ namespace boost { namespace python {
3939
# endif // CALL_METHOD_DWA2002411_HPP
4040

4141
#elif BOOST_PP_ITERATION_DEPTH() == 1
42-
# line BOOST_PP_LINE(__LINE__, call_method.hpp)
42+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
43+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
44+
# line BOOST_PP_LINE(__LINE__, call_method.hpp)
45+
# endif
4346

4447
# define N BOOST_PP_ITERATION()
4548

include/boost/python/class.hpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,14 @@
4747
# include <boost/utility.hpp>
4848
# include <boost/detail/workaround.hpp>
4949

50-
# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) || BOOST_WORKAROUND(__GNUC__, < 3)
50+
# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) \
51+
/* pro9 reintroduced the bug */ \
52+
|| (BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
53+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) \
54+
|| BOOST_WORKAROUND(__GNUC__, < 3)
55+
5156
# define BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING 1
57+
5258
# endif
5359

5460
# ifdef BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING

include/boost/python/detail/is_xxx.hpp

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,44 +14,47 @@
1414
# include <boost/type_traits/is_reference.hpp>
1515
# include <boost/type_traits/add_reference.hpp>
1616

17-
# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \
18-
template <class X_> \
19-
struct is_##name \
20-
{ \
21-
typedef char yes; \
22-
typedef char (&no)[2]; \
23-
\
24-
static typename add_reference<X_>::type dummy; \
25-
\
26-
template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
27-
static yes test( \
28-
qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \
29-
); \
30-
\
31-
template <class U> \
32-
static no test(U&, ...); \
33-
\
34-
BOOST_STATIC_CONSTANT( \
35-
bool, value \
36-
= !is_reference<X_>::value \
37-
& (sizeof(test(dummy, 0)) == sizeof(yes))); \
38-
\
39-
typedef mpl::bool_<value> type; \
17+
# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \
18+
template <class X_> \
19+
struct is_##name \
20+
{ \
21+
typedef char yes; \
22+
typedef char (&no)[2]; \
23+
\
24+
static typename add_reference<X_>::type dummy; \
25+
\
26+
struct helpers \
27+
{ \
28+
template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
29+
static yes test( \
30+
qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \
31+
); \
32+
\
33+
template <class U> \
34+
static no test(U&, ...); \
35+
}; \
36+
\
37+
BOOST_STATIC_CONSTANT( \
38+
bool, value \
39+
= !is_reference<X_>::value \
40+
& (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \
41+
\
42+
typedef mpl::bool_<value> type; \
4043
};
4144

4245
# else
4346

4447
# define BOOST_PYTHON_IS_XXX_DEF(name, qualified_name, nargs) \
4548
template <class T> \
46-
struct is_##name : mpl::false_ \
49+
struct is_##name : mpl::false_ \
4750
{ \
4851
}; \
4952
\
5053
template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \
5154
struct is_##name< \
5255
qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \
5356
> \
54-
: mpl::true_ \
57+
: mpl::true_ \
5558
{ \
5659
};
5760

include/boost/python/detail/result.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ result(X const&, short = 0) { return 0; }
8888

8989
/* --------------- function pointers --------------- */
9090
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER
91-
# line BOOST_PP_LINE(__LINE__, result.hpp(function pointers))
91+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
92+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
93+
# line BOOST_PP_LINE(__LINE__, result.hpp(function pointers))
94+
# endif
9295

9396
# define N BOOST_PP_ITERATION()
9497

@@ -108,7 +111,10 @@ boost::type<R>* result(R (*pf)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)), int = 0)
108111
# include BOOST_PP_ITERATE()
109112

110113
#elif BOOST_PP_ITERATION_DEPTH() == 2
111-
# line BOOST_PP_LINE(__LINE__, result.hpp(pointers-to-members))
114+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
115+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
116+
# line BOOST_PP_LINE(__LINE__, result.hpp(pointers-to-members))
117+
# endif
112118
// Inner over arities
113119

114120
# define N BOOST_PP_ITERATION()

include/boost/python/detail/target.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ T& (* target(R (T::*)) )() { return 0; }
3939

4040
/* --------------- function pointers --------------- */
4141
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER
42-
# line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers))
42+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
43+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
44+
# line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers))
45+
# endif
4346

4447
# define N BOOST_PP_ITERATION()
4548

@@ -59,7 +62,10 @@ BOOST_PP_IF(N, A0, void)(* target(R (*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A))) )()
5962
# include BOOST_PP_ITERATE()
6063

6164
#elif BOOST_PP_ITERATION_DEPTH() == 2
62-
# line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members))
65+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
66+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
67+
# line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members))
68+
# endif
6369
// Inner over arities
6470

6571
# define N BOOST_PP_ITERATION()

include/boost/python/object/make_holder.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ template <int nargs> struct make_holder;
4545
# endif // MAKE_HOLDER_DWA20011215_HPP
4646

4747
#elif BOOST_PP_ITERATION_DEPTH() == 1
48-
# line BOOST_PP_LINE(__LINE__, make_holder.hpp)
48+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
49+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
50+
# line BOOST_PP_LINE(__LINE__, make_holder.hpp)
51+
# endif
4952

5053
# define N BOOST_PP_ITERATION()
5154

include/boost/python/object/pointer_holder.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,10 @@ void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t)
136136

137137
/* --------------- pointer_holder --------------- */
138138
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1
139-
# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp)
139+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
140+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
141+
# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp)
142+
# endif
140143

141144
# define N BOOST_PP_ITERATION()
142145

@@ -153,7 +156,10 @@ void* pointer_holder_back_reference<Pointer, Value>::holds(type_info dst_t)
153156

154157
/* --------------- pointer_holder_back_reference --------------- */
155158
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2
156-
# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference))
159+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
160+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
161+
# line BOOST_PP_LINE(__LINE__, pointer_holder.hpp(pointer_holder_back_reference))
162+
# endif
157163

158164
# define N BOOST_PP_ITERATION()
159165

include/boost/python/object/value_holder.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ void* value_holder_back_reference<Value,Held>::holds(
103103
// --------------- value_holder ---------------
104104

105105
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 1
106-
# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder))
106+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
107+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
108+
# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder))
109+
# endif
107110

108111
# define N BOOST_PP_ITERATION()
109112

@@ -122,7 +125,10 @@ void* value_holder_back_reference<Value,Held>::holds(
122125
// --------------- value_holder_back_reference ---------------
123126

124127
#elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == 2
125-
# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder_back_reference))
128+
# if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
129+
&& BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
130+
# line BOOST_PP_LINE(__LINE__, value_holder.hpp(value_holder_back_reference))
131+
# endif
126132

127133
# define N BOOST_PP_ITERATION()
128134

0 commit comments

Comments
 (0)