@@ -356,6 +356,8 @@ struct smart_holder_type_caster_class_hooks : smart_holder_type_caster_base_tag
356356 auto *holder_void_ptr = const_cast <void *>(holder_const_void_ptr);
357357
358358 auto v_h = inst->get_value_and_holder (detail::get_type_info (typeid (WrappedType)));
359+ printf (" \n LOOOK [%lu] %s:%d\n " , (std::size_t ) v_h.value_ptr (), __FILE__, __LINE__); fflush (stdout);
360+ // long *BAD = nullptr; *BAD = 101;
359361 if (!v_h.instance_registered ()) {
360362 register_instance (inst, v_h.value_ptr (), v_h.type );
361363 v_h.set_instance_registered ();
@@ -642,6 +644,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
642644 }
643645
644646 static handle cast (T const *src, return_value_policy policy, handle parent) {
647+ printf (" \n LOOOK [%lu] IsBase0Still %s:%d\n " , (std::size_t ) src, __FILE__, __LINE__); fflush (stdout);
645648 auto st = type_caster_base<T>::src_and_type (src);
646649 return cast_const_raw_ptr ( // Originally type_caster_generic::cast.
647650 st.first ,
@@ -688,6 +691,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
688691 void *(*copy_constructor)(const void *),
689692 void *(*move_constructor)(const void *),
690693 const void *existing_holder = nullptr) {
694+ printf (" \n LOOOK [%lu] IsDerivedAlready %s:%d\n " , (std::size_t ) _src, __FILE__, __LINE__); fflush (stdout);
691695 if (!tinfo) { // no type info: error will be set already
692696 return handle ();
693697 }
@@ -780,6 +784,7 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
780784 static constexpr auto name = const_name<T>();
781785
782786 static handle cast (const std::shared_ptr<T> &src, return_value_policy policy, handle parent) {
787+ printf (" \n LOOOK [%lu] %s:%d\n " , (std::size_t ) src.get (), __FILE__, __LINE__); fflush (stdout);
783788 switch (policy) {
784789 case return_value_policy::automatic:
785790 case return_value_policy::automatic_reference:
@@ -821,8 +826,10 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
821826 inst_raw_ptr->owned = true ;
822827 void *&valueptr = values_and_holders (inst_raw_ptr).begin ()->value_ptr ();
823828 valueptr = src_raw_void_ptr;
829+ printf (" \n LOOOK [%lu] IsBase0 %s:%d\n " , (std::size_t ) valueptr, __FILE__, __LINE__); fflush (stdout);
830+ printf (" \n LOOOK [%lu] IsDerived %s:%d\n " , (std::size_t ) st.first , __FILE__, __LINE__); fflush (stdout);
824831
825- auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (src);
832+ auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (std::shared_ptr< void >( src, const_cast < void *>(st. first )) );
826833 tinfo->init_instance (inst_raw_ptr, static_cast <const void *>(&smhldr));
827834
828835 if (policy == return_value_policy::reference_internal) {
0 commit comments