Single-argument C++ constructors in pyplusplus seem to generate a boost::python::implicitly_convertible tag, even when the constructor is declared "explicit" in C++. That doesn't sound right to me. Shouldn't a pair of types that are not implicitly convertible in C++, also not be implicitly convertible in python?
I suspect I can manually adjust the implicitly_convertible tag generation using the "allow_implicit_conversion" flag in pyplusplus. Is there a way to tell pyplusplus to avoid generating an implicitly_convertible tag for all explicit constructors? ########## test.h input source ############ class Foo { public: Foo() {} }; class Bar { public: // explicit constructor means don't implicitly convert Foo to Bar in C++ explicit Bar(Foo&) {} }; ############################### ########## wrap.py wrapping code #### from pyplusplus import module_builder mb = module_builder.module_builder_t(["test.h"] , gccxml_path = "C:\\Program Files\\gccxml_sherm\\bin\\gccxml.exe") mb.build_code_creator( module_name='test' ) mb.write_module( 'test_explicit.cpp' ) ################################## ##### generated test_explicit.cpp ###### // This file has been generated by Py++. #include "boost/python.hpp" #include "test.h" namespace bp = boost::python; BOOST_PYTHON_MODULE(test){ { //::Bar typedef bp::class_< Bar > Bar_exposer_t; Bar_exposer_t Bar_exposer = Bar_exposer_t( "Bar", bp::init< Foo & >(( bp::arg("arg0") )) ); bp::scope Bar_scope( Bar_exposer ); bp::implicitly_convertible< Foo &, Bar >(); // <-- *** I'm surprised by this *** } bp::class_< Foo >( "Foo", bp::init< >() ); } ################################## _______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig