module virtual_poly_runme; import std.exception; import virtual_poly.NDouble; import virtual_poly.NInt; import virtual_poly.NNumber; void main() { // D supports covariant (polymorphic) return types, so this should work like // in C++. auto d = new NDouble(3.5); NDouble dc = d.copy(); enforce(d.get() == dc.get(), "Test 1 failed."); auto i = new NInt(2); NInt ic = i.copy(); enforce(i.get() == ic.get(), "Test 2 failed."); NNumber n = d; auto nd = cast(NDouble) n.copy(); enforce(nd.get() == d.get(), "Test 3 failed."); }