@@ -980,7 +980,7 @@ struct copyable_holder_caster<
980980
981981 explicit operator std::shared_ptr<type> &() {
982982 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
983- shared_ptr_storage = sh_load_helper.load_as_shared_ptr (value);
983+ shared_ptr_storage = sh_load_helper.load_as_shared_ptr (typeinfo, value);
984984 }
985985 return shared_ptr_storage;
986986 }
@@ -989,7 +989,8 @@ struct copyable_holder_caster<
989989 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
990990 // Reusing shared_ptr code to minimize code complexity.
991991 shared_ptr_storage
992- = sh_load_helper.load_as_shared_ptr (value,
992+ = sh_load_helper.load_as_shared_ptr (typeinfo,
993+ value,
993994 /* responsible_parent=*/ nullptr ,
994995 /* force_potentially_slicing_shared_ptr=*/ true );
995996 }
@@ -1019,7 +1020,8 @@ struct copyable_holder_caster<
10191020 copyable_holder_caster loader;
10201021 loader.load (responsible_parent, /* convert=*/ false );
10211022 assert (loader.typeinfo ->holder_enum_v == detail::holder_enum_t ::smart_holder);
1022- return loader.sh_load_helper .load_as_shared_ptr (loader.value , responsible_parent);
1023+ return loader.sh_load_helper .load_as_shared_ptr (
1024+ loader.typeinfo , loader.value , responsible_parent);
10231025 }
10241026
10251027protected:
@@ -1240,20 +1242,20 @@ struct move_only_holder_caster<
12401242
12411243 explicit operator std::unique_ptr<type, deleter>() {
12421244 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
1243- return sh_load_helper.template load_as_unique_ptr <deleter>(value);
1245+ return sh_load_helper.template load_as_unique_ptr <deleter>(typeinfo, value);
12441246 }
12451247 pybind11_fail (" Expected to be UNREACHABLE: " __FILE__ " :" PYBIND11_TOSTRING (__LINE__));
12461248 }
12471249
12481250 explicit operator const std::unique_ptr<type, deleter> &() {
12491251 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
12501252 // Get shared_ptr to ensure that the Python object is not disowned elsewhere.
1251- shared_ptr_storage = sh_load_helper.load_as_shared_ptr (value);
1253+ shared_ptr_storage = sh_load_helper.load_as_shared_ptr (typeinfo, value);
12521254 // Build a temporary unique_ptr that is meant to never expire.
12531255 unique_ptr_storage = std::shared_ptr<std::unique_ptr<type, deleter>>(
12541256 new std::unique_ptr<type, deleter>{
12551257 sh_load_helper.template load_as_const_unique_ptr <deleter>(
1256- shared_ptr_storage.get ())},
1258+ typeinfo, shared_ptr_storage.get ())},
12571259 [](std::unique_ptr<type, deleter> *ptr) {
12581260 if (!ptr) {
12591261 pybind11_fail (" FATAL: `const std::unique_ptr<T, D> &` was disowned "
0 commit comments