mirror of
https://github.com/pybind/pybind11.git
synced 2025-01-19 09:25:51 +00:00
[smart_holder] Make smart holder type caster of unique_ptr
accept automatic_reference
(#4775)
* Also accept automatic_reference * Add a test case * Remove the test case * Add another test case * Fix test case
This commit is contained in:
parent
b6444460ee
commit
f1e2e55bda
@ -965,6 +965,7 @@ struct smart_holder_type_caster<std::unique_ptr<T, D>> : smart_holder_type_caste
|
||||
|
||||
static handle cast(std::unique_ptr<T, D> &&src, return_value_policy policy, handle parent) {
|
||||
if (policy != return_value_policy::automatic
|
||||
&& policy != return_value_policy::automatic_reference
|
||||
&& policy != return_value_policy::reference_internal
|
||||
&& policy != return_value_policy::move
|
||||
&& policy != return_value_policy::_clif_automatic) {
|
||||
|
@ -160,6 +160,12 @@ TEST_SUBMODULE(class_sh_basic, m) {
|
||||
m.def("args_shared_ptr_const", [](std::shared_ptr<atyp const> p) { return p; });
|
||||
m.def("args_unique_ptr", [](std::unique_ptr<atyp> p) { return p; });
|
||||
m.def("args_unique_ptr_const", [](std::unique_ptr<atyp const> p) { return p; });
|
||||
|
||||
// Make sure unique_ptr type caster accept automatic_reference return value policy.
|
||||
m.def(
|
||||
"rtrn_uq_automatic_reference",
|
||||
[]() { return std::unique_ptr<atyp>(new atyp("rtrn_uq_automatic_reference")); },
|
||||
pybind11::return_value_policy::automatic_reference);
|
||||
}
|
||||
|
||||
} // namespace class_sh_basic
|
||||
|
@ -181,3 +181,7 @@ def test_function_signatures(doc):
|
||||
doc(m.args_unique_ptr_const)
|
||||
== "args_unique_ptr_const(arg0: m.class_sh_basic.atyp) -> m.class_sh_basic.atyp"
|
||||
)
|
||||
|
||||
|
||||
def test_unique_ptr_return_value_policy_automatic_reference():
|
||||
assert m.get_mtxt(m.rtrn_uq_automatic_reference()) == "rtrn_uq_automatic_reference"
|
||||
|
Loading…
Reference in New Issue
Block a user