@@ -129,12 +129,17 @@ struct SharedPtrStash {
129
129
void Add (const std::shared_ptr<const atyp> &obj) { stash.push_back (obj); }
130
130
};
131
131
132
+ class LocalUnusualOpRef : UnusualOpRef {}; // To avoid clashing with `py::class_<UnusualOpRef>`.
133
+ py::object CastUnusualOpRefConstRef (const LocalUnusualOpRef &cref) { return py::cast (cref); }
134
+ py::object CastUnusualOpRefMovable (LocalUnusualOpRef &&mvbl) { return py::cast (std::move (mvbl)); }
135
+
132
136
} // namespace class_sh_basic
133
137
} // namespace pybind11_tests
134
138
135
139
PYBIND11_SMART_HOLDER_TYPE_CASTERS (pybind11_tests::class_sh_basic::atyp)
136
140
PYBIND11_SMART_HOLDER_TYPE_CASTERS(pybind11_tests::class_sh_basic::uconsumer)
137
141
PYBIND11_SMART_HOLDER_TYPE_CASTERS(pybind11_tests::class_sh_basic::SharedPtrStash)
142
+ PYBIND11_SMART_HOLDER_TYPE_CASTERS(pybind11_tests::class_sh_basic::LocalUnusualOpRef)
138
143
139
144
namespace pybind11_tests {
140
145
namespace class_sh_basic {
@@ -227,6 +232,12 @@ TEST_SUBMODULE(class_sh_basic, m) {
227
232
" rtrn_uq_automatic_reference" ,
228
233
[]() { return std::unique_ptr<atyp>(new atyp (" rtrn_uq_automatic_reference" )); },
229
234
pybind11::return_value_policy::automatic_reference);
235
+
236
+ py::classh<LocalUnusualOpRef>(m, " LocalUnusualOpRef" );
237
+ m.def (" CallCastUnusualOpRefConstRef" ,
238
+ []() { return CastUnusualOpRefConstRef (LocalUnusualOpRef ()); });
239
+ m.def (" CallCastUnusualOpRefMovable" ,
240
+ []() { return CastUnusualOpRefMovable (LocalUnusualOpRef ()); });
230
241
}
231
242
232
243
} // namespace class_sh_basic
0 commit comments