@@ -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 ();
@@ -650,6 +652,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
650652 }
651653
652654 static handle cast (T const *src, return_value_policy policy, handle parent) {
655+ printf (" \n LOOOK [%lu] IsBase0Still %s:%d\n " , (std::size_t ) src, __FILE__, __LINE__); fflush (stdout);
653656 auto st = type_caster_base<T>::src_and_type (src);
654657 if (policy == return_value_policy::_clif_automatic) {
655658 policy = return_value_policy::copy;
@@ -702,6 +705,7 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
702705 void *(*copy_constructor)(const void *),
703706 void *(*move_constructor)(const void *),
704707 const void *existing_holder = nullptr) {
708+ printf (" \n LOOOK [%lu] IsDerivedAlready %s:%d\n " , (std::size_t ) _src, __FILE__, __LINE__); fflush (stdout);
705709 if (!tinfo) { // no type info: error will be set already
706710 return handle ();
707711 }
@@ -794,6 +798,7 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
794798 static constexpr auto name = const_name<T>();
795799
796800 static handle cast (const std::shared_ptr<T> &src, return_value_policy policy, handle parent) {
801+ printf (" \n LOOOK [%lu] %s:%d\n " , (std::size_t ) src.get (), __FILE__, __LINE__); fflush (stdout);
797802 switch (policy) {
798803 case return_value_policy::automatic:
799804 case return_value_policy::automatic_reference:
@@ -835,8 +840,10 @@ struct smart_holder_type_caster<std::shared_ptr<T>> : smart_holder_type_caster_l
835840 inst_raw_ptr->owned = true ;
836841 void *&valueptr = values_and_holders (inst_raw_ptr).begin ()->value_ptr ();
837842 valueptr = src_raw_void_ptr;
843+ printf (" \n LOOOK [%lu] IsBase0 %s:%d\n " , (std::size_t ) valueptr, __FILE__, __LINE__); fflush (stdout);
844+ printf (" \n LOOOK [%lu] IsDerived %s:%d\n " , (std::size_t ) st.first , __FILE__, __LINE__); fflush (stdout);
838845
839- auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (src);
846+ auto smhldr = pybindit::memory::smart_holder::from_shared_ptr (std::shared_ptr< void >( src, const_cast < void *>(st. first )) );
840847 tinfo->init_instance (inst_raw_ptr, static_cast <const void *>(&smhldr));
841848
842849 if (policy == return_value_policy::reference_internal) {
0 commit comments