// https://issues.dlang.org/show_bug.cgi?id=21039 class Inner {} class Outer { Inner inner; alias inner this; this(Inner i) { inner = i; } } void main() { auto inner = new Inner; auto outer = new Outer(new Inner); // implicit cast goes through 'alias this' Inner inner1 = outer; // Already does it assert(inner1); Inner[] inners = [inner, outer]; // Fixed assert(inners[0], "first element is null"); assert(inners[1], "second element is null"); Inner inner2 = 1 ? outer : inner; // Fixed assert(inner2); }