Add return value policy _clif_automatic (#4343)

This commit is contained in:
Xiaofei Wang 2022-11-18 08:55:10 -08:00 committed by GitHub
parent fcdb9bae21
commit 6d3a0fc319
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 1 deletions

View File

@ -478,7 +478,16 @@ enum class return_value_policy : uint8_t {
but the purpose of _return_as_bytes is certain to be orthogonal, because but the purpose of _return_as_bytes is certain to be orthogonal, because
C++ strings are always copied to Python `bytes` or `str`. C++ strings are always copied to Python `bytes` or `str`.
NOTE: This policy is NOT available on master. */ 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) PYBIND11_NAMESPACE_BEGIN(detail)

View File

@ -795,6 +795,7 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
break; break;
case return_value_policy::reference_internal: case return_value_policy::reference_internal:
case return_value_policy::_return_as_bytes: case return_value_policy::_return_as_bytes:
case return_value_policy::_clif_automatic:
break; break;
} }
if (!src) { if (!src) {