#include #include "pybind11_tests.h" #include namespace pybind11_tests { namespace class_sh_unique_ptr_custom_deleter { // Reduced from a PyCLIF use case in the wild by @wangxf123456. class Pet { public: using Ptr = std::unique_ptr>; std::string name; static Ptr New(const std::string &name) { return Ptr(new Pet(name), std::default_delete()); } private: explicit Pet(const std::string &name) : name(name) {} }; } // namespace class_sh_unique_ptr_custom_deleter } // namespace pybind11_tests PYBIND11_SMART_HOLDER_TYPE_CASTERS(pybind11_tests::class_sh_unique_ptr_custom_deleter::Pet) namespace pybind11_tests { namespace class_sh_unique_ptr_custom_deleter { TEST_SUBMODULE(class_sh_unique_ptr_custom_deleter, m) { m.attr("defined_PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT") = #ifndef PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT false; #else true; py::classh(m, "Pet").def_readwrite("name", &Pet::name); m.def("create", &Pet::New); #endif // PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT } } // namespace class_sh_unique_ptr_custom_deleter } // namespace pybind11_tests