@@ -858,8 +858,12 @@ struct copyable_holder_caster<
858858 using base::value;
859859
860860 bool load (handle src, bool convert) {
861- return base::template load_impl<copyable_holder_caster<type, std::shared_ptr<type>>>(
862- src, convert);
861+ if (base::template load_impl<copyable_holder_caster<type, std::shared_ptr<type>>>(
862+ src, convert)) {
863+ sh_load_helper.maybe_set_python_instance_is_alias (src);
864+ return true ;
865+ }
866+ return false ;
863867 }
864868
865869 explicit operator std::shared_ptr<type> *() {
@@ -914,6 +918,7 @@ struct copyable_holder_caster<
914918 void load_value (value_and_holder &&v_h) {
915919 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
916920 sh_load_helper.loaded_v_h = v_h;
921+ sh_load_helper.was_populated = true ;
917922 value = sh_load_helper.get_void_ptr_or_nullptr ();
918923 return ;
919924 }
@@ -1041,14 +1046,19 @@ struct move_only_holder_caster<
10411046 }
10421047
10431048 bool load (handle src, bool convert) {
1044- return base::template load_impl<
1045- move_only_holder_caster<type, std::unique_ptr<type, deleter>>>(src, convert);
1049+ if (base::template load_impl<
1050+ move_only_holder_caster<type, std::unique_ptr<type, deleter>>>(src, convert)) {
1051+ sh_load_helper.maybe_set_python_instance_is_alias (src);
1052+ return true ;
1053+ }
1054+ return false ;
10461055 }
10471056
10481057 void load_value (value_and_holder &&v_h) {
10491058 if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
10501059 sh_load_helper.loaded_v_h = v_h;
10511060 sh_load_helper.loaded_v_h .type = typeinfo;
1061+ sh_load_helper.was_populated = true ;
10521062 value = sh_load_helper.get_void_ptr_or_nullptr ();
10531063 return ;
10541064 }
0 commit comments