https://issues.dlang.org/show_bug.cgi?id=15626
--- Comment #2 from Walter Bright <bugzi...@digitalmars.com> --- Stripping away the unnecessary template and complex names: ---------- D ----------------- extern(C++) { class C { } interface I { void f(); } abstract class Base : I { int instance; } void test(Base b) { b.f(); } void mainx(); } int main() { mainx(); return 0; } ------------- C++ ------------ #include <stdio.h> class C { }; class I { virtual void f() = 0; }; class Base : public I { public: int pInstance; Base() { pInstance = 0xBAADF00D; } }; class Derived : public Base { public: void f() { printf("!!"); } }; void test(Base *b); void mainx() { Derived *d = new Derived; test(d); } --