diff --git a/unittest/bind_virtual_factory.cpp b/unittest/bind_virtual_factory.cpp
index f3861cae17c3c0d738eb8d90839bea62e6525648..373c97825e72d90a988d90e21739f37220d76314 100644
--- a/unittest/bind_virtual_factory.cpp
+++ b/unittest/bind_virtual_factory.cpp
@@ -72,7 +72,10 @@ struct VirtualClassWrapper : MyVirtualClass, bp::wrapper<MyVirtualClass> {
   }
 
   shared_ptr<MyVirtualData> createData() const override {
-    if (bp::override fo = this->get_override("createData")) return fo();
+    if (bp::override fo = this->get_override("createData")) {
+      bp::object result = fo();
+      return bp::extract<shared_ptr<MyVirtualData>>(result);
+    }
     return default_createData();
   }