diff --git a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp
index 91e0a88..93d435c 100644
--- a/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp
+++ b/include/chaiscript/dispatchkit/dynamic_cast_conversion.hpp
@@ -242,8 +242,6 @@ namespace chaiscript
/// chai.add(chaiscript::base_class());
/// \endcode
///
- /// \todo Move share static type registration code into a mechanism that allows it to be properly
- /// shared by all modules
template
Dynamic_Cast_Conversion base_class()
{
diff --git a/src/test_module.cpp b/src/test_module.cpp
index 796f5ff..83cbc12 100644
--- a/src/test_module.cpp
+++ b/src/test_module.cpp
@@ -35,11 +35,17 @@ class TestDerivedType : public TestBaseType
public:
virtual ~TestDerivedType() {}
virtual int func() { return 1; }
+ int derived_only_func() { return 19; }
private:
TestDerivedType &operator=(const TestDerivedType &);
};
+boost::shared_ptr derived_type_factory()
+{
+ return boost::shared_ptr(new TestDerivedType());
+}
+
std::string hello_world()
{
return "Hello World";
@@ -81,6 +87,10 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo
m->add(chaiscript::base_class());
+ m->add(chaiscript::fun(&TestDerivedType::derived_only_func), "derived_only_func");
+
+ m->add(chaiscript::fun(&derived_type_factory), "derived_type_factory");
+
m->add(chaiscript::fun(&TestBaseType::func), "func");
m->add(chaiscript::fun(&TestBaseType::val), "val");
m->add(chaiscript::fun(&TestBaseType::const_val), "const_val");
diff --git a/unittests/inheritance.chai b/unittests/inheritance.chai
index 0231a50..0105c68 100644
--- a/unittests/inheritance.chai
+++ b/unittests/inheritance.chai
@@ -15,3 +15,12 @@ assert_equal(15, t.const_val);
t.val = 23;
assert_equal(23, t.val)
+// test_derived_factory returns a TestDerivedType contained
+// in a shared_ptr. This is testing our ability
+// to detect that and do the down casting for the user automatically
+// at runtime
+var d := derived_type_factory();
+
+assert_equal(t.derived_only_func(), 19);
+assert_equal(d.derived_only_func(), 19);
+