@@ -54,16 +54,22 @@ struct Diamond : Left, Right {
5454 int self_tag = 99 ;
5555};
5656
57+ // Factory that returns the *virtual base* type (raw pointer)
58+ VBase *make_diamond_as_vbase_raw_ptr () {
59+ auto ptr = new Diamond;
60+ return ptr; // upcast
61+ }
62+
5763// Factory that returns the *virtual base* type (shared_ptr)
5864std::shared_ptr<VBase> make_diamond_as_vbase_shared_ptr () {
5965 auto shptr = std::make_shared<Diamond>();
60- return shptr; // upcast to VBase shared_ptr (virtual base)
66+ return shptr; // upcast
6167}
6268
6369// Factory that returns the *virtual base* type (unique_ptr)
6470std::unique_ptr<VBase> make_diamond_as_vbase_unique_ptr () {
6571 auto uqptr = std::unique_ptr<Diamond>(new Diamond);
66- return uqptr; // upcast to VBase unique_ptr (virtual base)
72+ return uqptr; // upcast
6773}
6874
6975// For diagnostics / skip decisions in test
@@ -152,6 +158,9 @@ TEST_SUBMODULE(class_sh_mi_thunks, m) {
152158 .def (py::init<>())
153159 .def (" ping" , &Diamond::ping);
154160
161+ m.def (" make_diamond_as_vbase_raw_ptr" ,
162+ &make_diamond_as_vbase_raw_ptr,
163+ py::return_value_policy::take_ownership);
155164 m.def (" make_diamond_as_vbase_shared_ptr" , &make_diamond_as_vbase_shared_ptr);
156165 m.def (" make_diamond_as_vbase_unique_ptr" , &make_diamond_as_vbase_unique_ptr);
157166
0 commit comments