diff --git a/tests/test_python_multiple_inheritance.cpp b/tests/test_python_multiple_inheritance.cpp index 689917158..d8fdcf1cf 100644 --- a/tests/test_python_multiple_inheritance.cpp +++ b/tests/test_python_multiple_inheritance.cpp @@ -26,6 +26,14 @@ private: int drvd_value; }; +struct CppDrv2 : CppDrvd { + explicit CppDrv2(int value) : CppDrvd(value), drv2_value(value * 5) {} + int get_drv2_value() const { return drv2_value; } + +private: + int drv2_value; +}; + } // namespace test_python_multiple_inheritance TEST_SUBMODULE(python_multiple_inheritance, m) { @@ -42,4 +50,12 @@ TEST_SUBMODULE(python_multiple_inheritance, m) { .def("reset_drvd_value", &CppDrvd::reset_drvd_value) .def("get_base_value_from_drvd", &CppDrvd::get_base_value_from_drvd) .def("reset_base_value_from_drvd", &CppDrvd::reset_base_value_from_drvd); + +#if 1 // This works. + py::class_(m, "CppDrv2") +#else // Apparent undefined behavior. + py::class_(m, "CppDrv2") +#endif + .def(py::init()) + .def("get_drv2_value", &CppDrv2::get_drv2_value); } diff --git a/tests/test_python_multiple_inheritance.py b/tests/test_python_multiple_inheritance.py index 3bddd67df..4acc5202e 100644 --- a/tests/test_python_multiple_inheritance.py +++ b/tests/test_python_multiple_inheritance.py @@ -12,6 +12,10 @@ class PPCC(PC, m.CppDrvd): pass +class PPCC2(PC, m.CppDrv2): + pass + + def test_PC(): d = PC(11) assert d.get_base_value() == 11 @@ -33,3 +37,10 @@ def test_PPCC(): d.reset_base_value_from_drvd(30) assert d.get_base_value() == 30 assert d.get_base_value_from_drvd() == 30 + + +def test_PPCC2(): + d = PPCC2(13) + assert d.get_drv2_value() == 65 + assert d.get_drvd_value() == 39 + assert d.get_base_value() == 13