diff --git a/include/pybind11/detail/smart_holder_type_caster_support.h b/include/pybind11/detail/smart_holder_type_caster_support.h index 4bb16a7c0..699ce81a4 100644 --- a/include/pybind11/detail/smart_holder_type_caster_support.h +++ b/include/pybind11/detail/smart_holder_type_caster_support.h @@ -82,6 +82,19 @@ handle smart_holder_from_unique_ptr(std::unique_ptr &&src, return inst.release(); } +template +handle smart_holder_from_unique_ptr(std::unique_ptr &&src, + return_value_policy policy, + handle parent, + const std::pair &st) { + return smart_holder_from_unique_ptr( + std::unique_ptr(const_cast(src.release()), + std::move(src.get_deleter())), // Const2Mutbl + policy, + parent, + st); +} + template handle unique_ptr_to_python(std::unique_ptr &&unq_ptr, return_value_policy policy, handle parent) { @@ -101,6 +114,7 @@ unique_ptr_to_python(std::unique_ptr &&unq_ptr, return_value_policy policy nullptr, std::addressof(unq_ptr)); } + template handle smart_holder_from_shared_ptr(const std::shared_ptr &src, return_value_policy policy, diff --git a/tests/test_class_sh_basic.cpp b/tests/test_class_sh_basic.cpp index 574068a6d..53b7a0f43 100644 --- a/tests/test_class_sh_basic.cpp +++ b/tests/test_class_sh_basic.cpp @@ -173,25 +173,25 @@ TEST_SUBMODULE(class_sh_basic, m) { m.def("pass_shcp", pass_shcp); m.def("rtrn_uqmp", rtrn_uqmp); - // BAKEIN_BREAK m.def("rtrn_uqcp", rtrn_uqcp); + m.def("rtrn_uqcp", rtrn_uqcp); // BAKEIN_BREAK m.def("pass_uqmp", pass_uqmp); // BAKEIN_BREAK m.def("pass_uqcp", pass_uqcp); m.def("rtrn_udmp", rtrn_udmp); - // BAKEIN_BREAK m.def("rtrn_udcp", rtrn_udcp); + m.def("rtrn_udcp", rtrn_udcp); // BAKEIN_BREAK m.def("pass_udmp", pass_udmp); // BAKEIN_BREAK m.def("pass_udcp", pass_udcp); m.def("rtrn_udmp_del", rtrn_udmp_del); - // BAKEIN_BREAK m.def("rtrn_udcp_del", rtrn_udcp_del); + m.def("rtrn_udcp_del", rtrn_udcp_del); // BAKEIN_BREAK m.def("pass_udmp_del", pass_udmp_del); // BAKEIN_BREAK m.def("pass_udcp_del", pass_udcp_del); m.def("rtrn_udmp_del_nd", rtrn_udmp_del_nd); - // BAKEIN_BREAK m.def("rtrn_udcp_del_nd", rtrn_udcp_del_nd); + m.def("rtrn_udcp_del_nd", rtrn_udcp_del_nd); // BAKEIN_BREAK m.def("pass_udmp_del_nd", pass_udmp_del_nd); // BAKEIN_BREAK m.def("pass_udcp_del_nd", pass_udcp_del_nd); diff --git a/tests/test_class_sh_basic.py b/tests/test_class_sh_basic.py index 1ad958952..48fa4f6b3 100644 --- a/tests/test_class_sh_basic.py +++ b/tests/test_class_sh_basic.py @@ -29,9 +29,9 @@ def test_atyp_constructors(): (m.rtrn_shmp, "rtrn_shmp"), (m.rtrn_shcp, "rtrn_shcp"), (m.rtrn_uqmp, "rtrn_uqmp"), - # BAKEIN_BREAK (m.rtrn_uqcp, "rtrn_uqcp"), + (m.rtrn_uqcp, "rtrn_uqcp"), (m.rtrn_udmp, "rtrn_udmp"), - # BAKEIN_BREAK (m.rtrn_udcp, "rtrn_udcp"), + (m.rtrn_udcp, "rtrn_udcp"), ], ) def test_cast(rtrn_f, expected):