Hi, here is some piece of code which most probably doesn't work one expect to. version (Tango) { import tango.io.Console; pragma(lib, "tango-user-dmd"); } else { import std.stdio; } class AbstractError: Error { this (char[] msg = null) { super(msg); } } abstract class Dummy { public { this() { if (!this) { throw new AbstractError(); } } } char[] Value(); } int main(char[][] args) { ClassInfo ci = ClassInfo.find("hello.Dummy"); if (ci) { Object o = ci.create(); if (o) { version (Tango) { Cout(o.toUtf8); } else { writef(o.toString); } } } return 0; } This code would compile without any error, but when you try to run, you will receive AV most probably directly in the constructor. I guess that in this case the call of ClassInfo.create should either return null or throw some kind of error....
*** Bug 2453 has been marked as a duplicate of this bug. ***
Added example from Bug 2453. abstract class C { } void main() { auto c = cast(C)C.classinfo.create(); assert(c is null); // should pass or classinfo.create should throw an exception }
The bug is primarily in druntime, but requires a dmd change to pass more information along. https://github.com/D-Programming-Language/dmd/pull/186 https://github.com/D-Programming-Language/druntime/pull/34
*** Issue 6667 has been marked as a duplicate of this issue. ***
https://github.com/D-Programming-Language/druntime/commit/b7270004a95c33372e5b15bc72069c001b064acf https://github.com/D-Programming-Language/phobos/commit/23109c032d9f3117f154a8bb0f588ef9ada85565 https://github.com/D-Programming-Language/dmd/commit/0a9a27646954d73dd32e38175a6126fbba6bd334 https://github.com/D-Programming-Language/dmd/commit/90dfda907b4b634effc12bc7ea546ab6b3ffe1b0