mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-29 08:32:02 +00:00
Reinterpret detail::type_info::default_holder
as "uses std::unique_ptr
holder" (which is the original meaning, and compatible with the original smart_holder branch).
This commit is contained in:
parent
cd4f5f6c5b
commit
58a1b75e43
@ -1849,7 +1849,10 @@ public:
|
|||||||
record.holder_size = sizeof(holder_type);
|
record.holder_size = sizeof(holder_type);
|
||||||
record.init_instance = init_instance;
|
record.init_instance = init_instance;
|
||||||
record.dealloc = dealloc;
|
record.dealloc = dealloc;
|
||||||
record.default_holder = std::is_same<holder_type, pybindit::memory::smart_holder>::value;
|
|
||||||
|
// A more fitting name would be uses_unique_ptr_holder.
|
||||||
|
record.default_holder = detail::is_instantiation<std::unique_ptr, holder_type>::value;
|
||||||
|
|
||||||
#ifdef PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT
|
#ifdef PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT
|
||||||
if (detail::is_instantiation<std::unique_ptr, holder_type>::value) {
|
if (detail::is_instantiation<std::unique_ptr, holder_type>::value) {
|
||||||
record.holder_enum_v = detail::holder_enum_t::std_unique_ptr;
|
record.holder_enum_v = detail::holder_enum_t::std_unique_ptr;
|
||||||
|
@ -211,11 +211,12 @@ TEST_SUBMODULE(class_, m) {
|
|||||||
m.def("mismatched_holder_1", []() {
|
m.def("mismatched_holder_1", []() {
|
||||||
auto mod = py::module_::import("__main__");
|
auto mod = py::module_::import("__main__");
|
||||||
py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(mod, "MismatchBase1");
|
py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(mod, "MismatchBase1");
|
||||||
py::class_<MismatchDerived1, MismatchBase1>(mod, "MismatchDerived1");
|
py::class_<MismatchDerived1, std::unique_ptr<MismatchDerived1>, MismatchBase1>(
|
||||||
|
mod, "MismatchDerived1");
|
||||||
});
|
});
|
||||||
m.def("mismatched_holder_2", []() {
|
m.def("mismatched_holder_2", []() {
|
||||||
auto mod = py::module_::import("__main__");
|
auto mod = py::module_::import("__main__");
|
||||||
py::class_<MismatchBase2>(mod, "MismatchBase2");
|
py::class_<MismatchBase2, std::unique_ptr<MismatchBase2>>(mod, "MismatchBase2");
|
||||||
py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>, MismatchBase2>(
|
py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>, MismatchBase2>(
|
||||||
mod, "MismatchDerived2");
|
mod, "MismatchDerived2");
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user