@@ -858,8 +858,12 @@ struct copyable_holder_caster<
858
858
using base::value;
859
859
860
860
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 ;
863
867
}
864
868
865
869
explicit operator std::shared_ptr<type> *() {
@@ -914,6 +918,7 @@ struct copyable_holder_caster<
914
918
void load_value (value_and_holder &&v_h) {
915
919
if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
916
920
sh_load_helper.loaded_v_h = v_h;
921
+ sh_load_helper.was_populated = true ;
917
922
value = sh_load_helper.get_void_ptr_or_nullptr ();
918
923
return ;
919
924
}
@@ -1041,14 +1046,19 @@ struct move_only_holder_caster<
1041
1046
}
1042
1047
1043
1048
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 ;
1046
1055
}
1047
1056
1048
1057
void load_value (value_and_holder &&v_h) {
1049
1058
if (typeinfo->holder_enum_v == detail::holder_enum_t ::smart_holder) {
1050
1059
sh_load_helper.loaded_v_h = v_h;
1051
1060
sh_load_helper.loaded_v_h .type = typeinfo;
1061
+ sh_load_helper.was_populated = true ;
1052
1062
value = sh_load_helper.get_void_ptr_or_nullptr ();
1053
1063
return ;
1054
1064
}
0 commit comments