On 1/4/19 2:55 PM, kdevel wrote:
On Friday, 4 January 2019 at 11:27:59 UTC, Alex wrote:
On Friday, 4 January 2019 at 09:58:59 UTC, bauss wrote:

[...]

As for the OP, I think here the usefulness of ", D" should be visible:

[...]

class B : A, D
{
    override int foo() { return 2; }
}

[...]

    D d = cast(D) b;
    assert(d.foo == 2);             // returns 2

If I remove the ", D" the program segfaults in this line:

Program received signal SIGSEGV, Segmentation fault.
0x000000000042c184 in D main () at ggg.d:26
26        d.foo();
(gdb) p d
$1 = (ggg.D *) 0x0

There is clearly an

    assert (d);

missing in the source. But why is d a null reference in the first place?

Because when you dynamically cast one object or interface to another object or interface, and that result is not possible (if you remove ",D" from the example you quoted, then neither A nor B implement D), then the result is null.

https://dlang.org/spec/expression.html#cast_expressions

See parts 2 and 3.

-Steve

Reply via email to