On 08/11/2018 10:55 PM, Eric wrote:
Code below compiles while I would not expect it to compile.
Is there a reason that this compiles?

[...]

class I {
   abstract void f();
}

class C : I {
}

unittest {
   C c = cast(C) Object.factory("C");
   c.f();
}

Not a bug, as far as I see.

You don't get compile-time errors with Object.factory. It works at run time, on dynamic values (e.g., a class name entered on the command line). You're calling it with a constant string, but the compiler doesn't care about that. There's no special handling for that.

Object.factory returns `null` when it can't create the object. And it does that in your example, because of the abstract method (and because "C" is wrong; the name must be fully qualified). You're supposed to check for `null` before attempting to use the object.

If you want a compile-time check, don't use Object.factory. Use `new` instead:

    C c = new C; /* Error: cannot create instance of abstract class C */

Reply via email to