diff options
Diffstat (limited to 'ext/pybind11/tests/test_inheritance.cpp')
-rw-r--r-- | ext/pybind11/tests/test_inheritance.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/ext/pybind11/tests/test_inheritance.cpp b/ext/pybind11/tests/test_inheritance.cpp index 2ec0b4a7a..c19f58dc2 100644 --- a/ext/pybind11/tests/test_inheritance.cpp +++ b/ext/pybind11/tests/test_inheritance.cpp @@ -36,6 +36,10 @@ public: Hamster(const std::string &name) : Pet(name, "rodent") {} }; +class Chimera : public Pet { + Chimera() : Pet("Kimmy", "chimera") {} +}; + std::string pet_name_species(const Pet &pet) { return pet.name() + " is a " + pet.species(); } @@ -49,6 +53,12 @@ struct BaseClass { virtual ~BaseClass() {} }; struct DerivedClass1 : BaseClass { }; struct DerivedClass2 : BaseClass { }; +struct MismatchBase1 { }; +struct MismatchDerived1 : MismatchBase1 { }; + +struct MismatchBase2 { }; +struct MismatchDerived2 : MismatchBase2 { }; + test_initializer inheritance([](py::module &m) { py::class_<Pet> pet_class(m, "Pet"); pet_class @@ -68,6 +78,8 @@ test_initializer inheritance([](py::module &m) { py::class_<Hamster, Pet>(m, "Hamster") .def(py::init<std::string>()); + py::class_<Chimera, Pet>(m, "Chimera"); + m.def("pet_name_species", pet_name_species); m.def("dog_bark", dog_bark); @@ -97,4 +109,15 @@ test_initializer inheritance([](py::module &m) { py::isinstance<Unregistered>(l[6]) ); }); + + m.def("test_mismatched_holder_type_1", []() { + auto m = py::module::import("__main__"); + py::class_<MismatchBase1, std::shared_ptr<MismatchBase1>>(m, "MismatchBase1"); + py::class_<MismatchDerived1, MismatchBase1>(m, "MismatchDerived1"); + }); + m.def("test_mismatched_holder_type_2", []() { + auto m = py::module::import("__main__"); + py::class_<MismatchBase2>(m, "MismatchBase2"); + py::class_<MismatchDerived2, std::shared_ptr<MismatchDerived2>, MismatchBase2>(m, "MismatchDerived2"); + }); }); |