Skip to content

Commit 0f559f3

Browse files
committed
Older EDG workaround
[SVN r15397]
1 parent 34aead4 commit 0f559f3

1 file changed

Lines changed: 21 additions & 92 deletions

File tree

include/boost/python/init.hpp

Lines changed: 21 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,26 @@
3636

3737
///////////////////////////////////////////////////////////////////////////////
3838
#define BOOST_PYTHON_TEMPLATE_TYPES_WITH_DEFAULT \
39-
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \
39+
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT \
40+
( \
4041
BOOST_PYTHON_MAX_ARITY, \
4142
class T, \
42-
mpl::void_) \
43+
mpl::void_ \
44+
) \
4345

4446
#define BOOST_PYTHON_TEMPLATE_TYPES \
45-
BOOST_PP_ENUM_PARAMS( \
47+
BOOST_PP_ENUM_PARAMS \
48+
( \
4649
BOOST_PYTHON_MAX_ARITY, \
47-
class T) \
50+
class T \
51+
) \
4852

4953
#define BOOST_PYTHON_TEMPLATE_ARGS \
50-
BOOST_PP_ENUM_PARAMS( \
54+
BOOST_PP_ENUM_PARAMS \
55+
( \
5156
BOOST_PYTHON_MAX_ARITY, \
52-
T) \
57+
T \
58+
) \
5359

5460
///////////////////////////////////////////////////////////////////////////////
5561
namespace boost { namespace python {
@@ -88,7 +94,7 @@ namespace detail {
8894
bool, value =
8995
sizeof(f(t())) == sizeof(::boost::type_traits::yes_type));
9096
typedef mpl::bool_c<value> type;
91-
97+
9298
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_optional,(T)) // needed for MSVC & Borland
9399
};
94100

@@ -117,62 +123,16 @@ namespace detail {
117123

118124
} // namespace detail
119125

120-
template <class DerivedT>
121-
struct init_base {
122-
123-
DerivedT const& derived() const
124-
{ return *static_cast<DerivedT const*>(this); }
125-
};
126-
127-
template <class CallPoliciesT, class InitT>
128-
struct init_with_call_policies
129-
: public init_base<init_with_call_policies<CallPoliciesT, InitT> >
130-
{
131-
BOOST_STATIC_CONSTANT(int, n_arguments = InitT::n_arguments);
132-
BOOST_STATIC_CONSTANT(int, n_defaults = InitT::n_defaults);
133-
134-
typedef typename InitT::reversed_args reversed_args;
135-
136-
init_with_call_policies(CallPoliciesT const& policies_, char const* doc_)
137-
: policies(policies_), doc(doc_) {}
138-
139-
char const* doc_string() const
140-
{ return doc; }
141-
142-
CallPoliciesT
143-
call_policies() const
144-
{ return policies; }
145-
146-
CallPoliciesT policies;
147-
char const* doc;
148-
};
149126

150127
template <BOOST_PYTHON_TEMPLATE_TYPES>
151-
struct init : public init_base<init<BOOST_PYTHON_TEMPLATE_ARGS> >
128+
struct init //: detail::check_init_params<BOOST_PYTHON_TEMPLATE_ARGS>
152129
{
153-
typedef init<BOOST_PYTHON_TEMPLATE_ARGS> self_t;
154-
155-
init(char const* doc_ = 0)
156-
: doc(doc_) {}
157-
158-
char const* doc_string() const
159-
{ return doc; }
160-
161-
default_call_policies
162-
call_policies() const
163-
{ return default_call_policies(); }
164-
165-
template <class CallPoliciesT>
166-
init_with_call_policies<CallPoliciesT, self_t>
167-
operator[](CallPoliciesT const& policies) const
168-
{ return init_with_call_policies<CallPoliciesT, self_t>(policies, doc); }
169-
170130
typedef detail::type_list<BOOST_PYTHON_TEMPLATE_ARGS> signature_;
171131
typedef typename mpl::end<signature_>::type finish;
172132

173133
// Find the optional<> element, if any
174134
typedef typename mpl::find_if<
175-
signature_, detail::is_optional<mpl::_1>
135+
signature_, detail::is_optional<mpl::_>
176136
>::type opt;
177137

178138

@@ -183,7 +143,7 @@ struct init : public init_base<init<BOOST_PYTHON_TEMPLATE_ARGS> >
183143
, mpl::next<opt>
184144
>::type expected_finish;
185145
BOOST_STATIC_ASSERT((is_same<expected_finish, finish>::value));
186-
146+
187147
typedef typename mpl::apply_if<
188148
is_same<opt,finish>
189149
, mpl::list0<>
@@ -213,36 +173,6 @@ struct init : public init_base<init<BOOST_PYTHON_TEMPLATE_ARGS> >
213173

214174
// Count the maximum number of arguments
215175
BOOST_STATIC_CONSTANT(int, n_arguments = mpl::size<reversed_args>::value);
216-
217-
char const* doc;
218-
};
219-
220-
template <> // specialization for zero args
221-
struct init<> : public init_base<init<> >
222-
{
223-
typedef init<> self_t;
224-
225-
init(char const* doc_ = 0)
226-
: doc(doc_) {}
227-
228-
char const* doc_string() const
229-
{ return doc; }
230-
231-
default_call_policies
232-
call_policies() const
233-
{ return default_call_policies(); }
234-
235-
template <class CallPoliciesT>
236-
init_with_call_policies<CallPoliciesT, self_t>
237-
operator[](CallPoliciesT const& policies) const
238-
{ return init_with_call_policies<CallPoliciesT, self_t>(policies, doc); }
239-
240-
BOOST_STATIC_CONSTANT(int, n_defaults = 0);
241-
BOOST_STATIC_CONSTANT(int, n_arguments = 0);
242-
243-
typedef detail::type_list<> reversed_args;
244-
245-
char const* doc;
246176
};
247177

248178
///////////////////////////////////////////////////////////////////////////////
@@ -268,10 +198,10 @@ namespace detail
268198
, mpl::list0<>
269199
, mpl::push_front<>
270200
>::type args;
271-
201+
272202
cl.def_init(args(), policies, doc);
273203
}
274-
204+
275205
///////////////////////////////////////////////////////////////////////////////
276206
//
277207
// define_class_init_helper<N>::apply
@@ -339,13 +269,12 @@ namespace detail
339269
// __init__(int)
340270
//
341271
///////////////////////////////////////////////////////////////////////////////
342-
template <class ClassT, class InitT>
272+
template <class ClassT, class CallPoliciesT, class InitT>
343273
void
344-
define_init(ClassT& cl, InitT const& i)
274+
define_init(ClassT& cl, InitT const& i, CallPoliciesT const& policies, char const* doc)
345275
{
346276
typedef typename InitT::reversed_args reversed_args;
347-
detail::define_class_init_helper<InitT::n_defaults>::apply(
348-
cl, i.call_policies(), reversed_args(), i.doc_string());
277+
detail::define_class_init_helper<InitT::n_defaults>::apply(cl, policies, reversed_args(), doc);
349278
}
350279

351280
}} // namespace boost::python

0 commit comments

Comments
 (0)