diff --git a/include/pybind11/detail/common.h b/include/pybind11/detail/common.h index 33abfb415..f07d2e651 100644 --- a/include/pybind11/detail/common.h +++ b/include/pybind11/detail/common.h @@ -478,7 +478,16 @@ enum class return_value_policy : uint8_t { but the purpose of _return_as_bytes is certain to be orthogonal, because C++ strings are always copied to Python `bytes` or `str`. NOTE: This policy is NOT available on master. */ - _return_as_bytes + _return_as_bytes, + + /** This policy should only be used by PyCLIF to automatically select a + return value policy. Legacy PyCLIF automatically decides object lifetime + management based on their properties: + https://github.com/google/clif/tree/main/clif/python#pointers-references-and-object-ownership + With this policy, the return value policy selection is consistent with + legacy PyCLIF. + NOTE: This policy is NOT available on master. */ + _clif_automatic }; PYBIND11_NAMESPACE_BEGIN(detail) diff --git a/include/pybind11/detail/smart_holder_type_casters.h b/include/pybind11/detail/smart_holder_type_casters.h index 5ff995003..7d351ac1b 100644 --- a/include/pybind11/detail/smart_holder_type_casters.h +++ b/include/pybind11/detail/smart_holder_type_casters.h @@ -795,6 +795,7 @@ struct smart_holder_type_caster> : smart_holder_type_caster_l break; case return_value_policy::reference_internal: case return_value_policy::_return_as_bytes: + case return_value_policy::_clif_automatic: break; } if (!src) {