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) {
|
static handle cast(std::unique_ptr<T, D> &&src, return_value_policy policy, handle parent) {
|
||||||
if (policy != return_value_policy::automatic
|
if (policy != return_value_policy::automatic
|
||||||
|
&& policy != return_value_policy::automatic_reference
|
||||||
&& policy != return_value_policy::reference_internal
|
&& policy != return_value_policy::reference_internal
|
||||||
&& policy != return_value_policy::move
|
&& policy != return_value_policy::move
|
||||||
&& policy != return_value_policy::_clif_automatic) {
|
&& 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_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", [](std::unique_ptr<atyp> p) { return p; });
|
||||||
m.def("args_unique_ptr_const", [](std::unique_ptr<atyp const> 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
|
} // namespace class_sh_basic
|
||||||
|
@ -181,3 +181,7 @@ def test_function_signatures(doc):
|
|||||||
doc(m.args_unique_ptr_const)
|
doc(m.args_unique_ptr_const)
|
||||||
== "args_unique_ptr_const(arg0: m.class_sh_basic.atyp) -> m.class_sh_basic.atyp"
|
== "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