diff --git a/test/operators_wrapper.cpp b/test/operators_wrapper.cpp new file mode 100644 index 00000000..f00aa2b4 --- /dev/null +++ b/test/operators_wrapper.cpp @@ -0,0 +1,42 @@ +#include "boost/python.hpp" +#include + +struct vector +{ + virtual ~vector() {} + + vector operator+( const vector& x ) const + { return vector(); } + + vector& operator+=( const vector& x ) + { return *this; } + + vector operator-() const + { return *this; } +}; + +struct dvector : vector +{}; + +using namespace boost::python; + +struct vector_wrapper + : vector, wrapper< vector > +{ + vector_wrapper(vector const&) {} + vector_wrapper() {} +}; + +BOOST_PYTHON_MODULE( operators_wrapper_ext ) +{ + class_< vector_wrapper >( "vector" ) + .def( self + self ) + .def( self += self ) + .def( -self ) + ; + + scope().attr("v") = vector(); + std::auto_ptr dp(new dvector); + register_ptr_to_python< std::auto_ptr >(); + scope().attr("d") = dp; +} diff --git a/test/operators_wrapper.py b/test/operators_wrapper.py new file mode 100644 index 00000000..6c889b0a --- /dev/null +++ b/test/operators_wrapper.py @@ -0,0 +1,11 @@ +from operators_wrapper_ext import * + +class D2(vector): pass +d2 = D2() + +for lhs in (v,d,d2): + -lhs + for rhs in (v,d,d2): + lhs + rhs + lhs += rhs +