diff --git a/include/boost/python/object/forward.hpp b/include/boost/python/object/forward.hpp index 149b7330..acae1173 100644 --- a/include/boost/python/object/forward.hpp +++ b/include/boost/python/object/forward.hpp @@ -10,28 +10,99 @@ # include # include # include +# include namespace boost { namespace python { namespace objects { +template +struct reference_to_value +{ + typedef typename add_reference::type>::type reference; + + reference_to_value(reference x) : m_value(x) {} + operator reference() const { return m_value; } + private: + reference m_value; +}; + // A little metaprogram which selects the type to pass through an // intermediate forwarding function when the destination argument type // is T. template struct forward -{ - BOOST_STATIC_CONSTANT( - bool, by_value = (is_scalar::value | is_reference::value) - ); - - typedef typename mpl::select_type< - by_value + : mpl::select_type< + is_scalar::value , T - , reference_wrapper< - typename add_const::type - > - >::type type; + , reference_to_value > +{ }; +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION +template +class unforward +{ + public: + typedef typename unwrap_reference::type& type; +}; + +template +class unforward > +{ + public: + typedef T type; +}; +# else // no partial specialization + +namespace detail +{ + typedef char (&yes_reference_to_value_t)[1]; + typedef char (&no_reference_to_value_t)[2]; + + no_reference_to_value_t is_reference_to_value_test(...); + + template + yes_reference_to_value_t is_reference_to_value_test(type< reference_to_value >); + + template + struct unforwarder + { + template + struct apply + { + typedef typename unwrap_reference::type& type; + }; + }; + + template<> + struct unforwarder + { + template + struct apply + { + typedef typename T::reference type; + }; + }; + + template + class is_reference_to_value + { + public: + BOOST_STATIC_CONSTANT( + bool, value = ( + sizeof(is_reference_to_value_test(type())) + == sizeof(yes_reference_to_value_t))); + }; +} + +template +class unforward + : public detail::unforwarder< + detail::is_reference_to_value::value + >::template apply +{}; + +# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + }}} // namespace boost::python::objects #endif // FORWARD_DWA20011215_HPP diff --git a/include/boost/python/object/pointer_holder.hpp b/include/boost/python/object/pointer_holder.hpp index 4ec46377..3a8e2cec 100644 --- a/include/boost/python/object/pointer_holder.hpp +++ b/include/boost/python/object/pointer_holder.hpp @@ -10,7 +10,7 @@ # include # include # include -# include +# include # include # include # include @@ -31,113 +31,113 @@ struct pointer_holder : instance_holder template pointer_holder(PyObject*, A1 a1) : m_p(new Value( - (typename unwrap_reference::type&)(a1) + (typename unforward::type)(a1) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) )) {} template pointer_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) : m_p(new Value( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) - , (typename unwrap_reference::type&)(a10) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) + , (typename unforward::type)(a10) )) {} @@ -166,7 +166,7 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) + , (typename unforward::type)(a1) )) { void const* x = &instance_finder::registration; (void)x; @@ -176,8 +176,8 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) )) { void const* x = &instance_finder::registration; (void)x; @@ -187,9 +187,9 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) )) { void const* x = &instance_finder::registration; (void)x; @@ -199,10 +199,10 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) )) { void const* x = &instance_finder::registration; (void)x; @@ -212,11 +212,11 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) )) { void const* x = &instance_finder::registration; (void)x; } @@ -225,12 +225,12 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) )) { void const* x = &instance_finder::registration; (void)x; } @@ -239,13 +239,13 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) )) { void const* x = &instance_finder::registration; (void)x; @@ -255,14 +255,14 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) )) { void const* x = &instance_finder::registration; (void)x; @@ -272,15 +272,15 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) )) { void const* x = &instance_finder::registration; (void)x; @@ -290,16 +290,16 @@ struct pointer_holder_back_reference : instance_holder template pointer_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) : m_p(new held_type(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) - , (typename unwrap_reference::type&)(a10) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) + , (typename unforward::type)(a10) )) { void const* x = &instance_finder::registration; (void)x; diff --git a/include/boost/python/object/value_holder.hpp b/include/boost/python/object/value_holder.hpp index e6d7f454..d98d1d10 100644 --- a/include/boost/python/object/value_holder.hpp +++ b/include/boost/python/object/value_holder.hpp @@ -11,7 +11,7 @@ # include # include # include -# include +# include namespace boost { namespace python { namespace objects { @@ -25,113 +25,113 @@ struct value_holder : instance_holder template value_holder(PyObject*, A1 a1) : m_held( - (typename unwrap_reference::type&)(a1) + (typename unforward::type)(a1) ) {} template value_holder(PyObject*, A1 a1, A2 a2) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) ) {} template value_holder(PyObject*, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) : m_held( - (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) - , (typename unwrap_reference::type&)(a10) + (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) + , (typename unforward::type)(a10) ) {} @@ -155,7 +155,7 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1) : m_held(p - , (typename unwrap_reference::type&)(a1) + , (typename unforward::type)(a1) ) { void const* x = &instance_finder::registration; (void)x; @@ -165,8 +165,8 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) ) { void const* x = &instance_finder::registration; (void)x; @@ -176,9 +176,9 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) ) { void const* x = &instance_finder::registration; (void)x; @@ -188,10 +188,10 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) ) { void const* x = &instance_finder::registration; (void)x; @@ -201,11 +201,11 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) ) { void const* x = &instance_finder::registration; (void)x; } @@ -214,12 +214,12 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) ) { void const* x = &instance_finder::registration; (void)x; } @@ -228,13 +228,13 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) ) { void const* x = &instance_finder::registration; (void)x; @@ -244,14 +244,14 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) ) { void const* x = &instance_finder::registration; (void)x; @@ -261,15 +261,15 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) ) { void const* x = &instance_finder::registration; (void)x; @@ -279,16 +279,16 @@ struct value_holder_back_reference : instance_holder template value_holder_back_reference(PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10) : m_held(p - , (typename unwrap_reference::type&)(a1) - , (typename unwrap_reference::type&)(a2) - , (typename unwrap_reference::type&)(a3) - , (typename unwrap_reference::type&)(a4) - , (typename unwrap_reference::type&)(a5) - , (typename unwrap_reference::type&)(a6) - , (typename unwrap_reference::type&)(a7) - , (typename unwrap_reference::type&)(a8) - , (typename unwrap_reference::type&)(a9) - , (typename unwrap_reference::type&)(a10) + , (typename unforward::type)(a1) + , (typename unforward::type)(a2) + , (typename unforward::type)(a3) + , (typename unforward::type)(a4) + , (typename unforward::type)(a5) + , (typename unforward::type)(a6) + , (typename unforward::type)(a7) + , (typename unforward::type)(a8) + , (typename unforward::type)(a9) + , (typename unforward::type)(a10) ) { void const* x = &instance_finder::registration; (void)x; diff --git a/test/Jamfile b/test/Jamfile index a9cd3fa0..0d494b70 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -53,6 +53,7 @@ rule bpl-test ( name ? : files * ) bpl-test bienstman1 ; bpl-test bienstman2 ; +bpl-test bienstman3 ; bpl-test try : newtest.py m1.cpp m2.cpp ; bpl-test builtin_converters : test_builtin_converters.py test_builtin_converters.cpp ; bpl-test test_pointer_adoption ; diff --git a/test/bienstman1.py b/test/bienstman1.py index 5d75388c..b98862ca 100644 --- a/test/bienstman1.py +++ b/test/bienstman1.py @@ -1,5 +1,6 @@ ''' ->>> import bienstman1_ext +>>> from bienstman1_ext import * +>>> # from Numeric import * ''' def run(args = None): import sys diff --git a/test/bienstman2.py b/test/bienstman2.py index 364f5504..45ee4134 100644 --- a/test/bienstman2.py +++ b/test/bienstman2.py @@ -1,5 +1,5 @@ ''' ->>> import bienstman1_ext.py +>>> import bienstman2_ext ''' def run(args = None): import sys diff --git a/test/bienstman3.cpp b/test/bienstman3.cpp new file mode 100644 index 00000000..60ddc385 --- /dev/null +++ b/test/bienstman3.cpp @@ -0,0 +1,33 @@ +#include +#include +#include + +struct V +{ + virtual void f() = 0; +}; + +struct B +{ + B(const V&) {} +}; + +BOOST_PYTHON_MODULE_INIT(bienstman3_ext) +{ + using namespace boost::python; + using boost::mpl::type_list; + + module m("bienstman3_ext"); + + m + + .add( + class_("V") + ) + + .add( + class_("B") + .def_init(type_list()) + ) + ; +} diff --git a/test/bienstman3.py b/test/bienstman3.py new file mode 100644 index 00000000..8a14c8ff --- /dev/null +++ b/test/bienstman3.py @@ -0,0 +1,15 @@ +''' +>>> from bienstman3_ext import * +''' +def run(args = None): + import sys + import doctest + + if args is not None: + sys.argv = args + return doctest.testmod(sys.modules.get(__name__)) + +if __name__ == '__main__': + print "running..." + import sys + sys.exit(run()[0])