Description
While trying to convert from Boost.Python I ran into the lifetime issue raised, e.g., in #2839, so I am using the smart_holder branch.
A minimal test case can be found at https://github.com/jakobandersen/pyTest/tree/pybind, with the central part at https://github.com/jakobandersen/pyTest/blob/pybind/libpytest.cpp#L42.
Essentially I have a custom function class which can be derived in Python. The problem is occurs when the function takes a std::shared_ptr
as argument and is called from C++. When using PYBIND11_OVERRIDE_PURE_NAME
to implement the call back to the Python implementation it will call the override with the default return_value_policy
, which seems to be automatic_reference
.
This gives the exception RuntimeError: Invalid return_value_policy for shared_ptr.
.
Expanding the macro and giving automatic
as policy makes it work as intended (as done in https://github.com/jakobandersen/pyTest/blob/pybind/libpytest.cpp#L58).
Am I missing something in the setup? Is this manual hax to make it work correct?