[Issue 8001] New: Alias this takes ownership of explicit cast

Namespace rswhite4 at googlemail.com
Wed May 2 10:22:10 PDT 2012


On Sunday, 29 April 2012 at 14:40:06 UTC, Jesse Phillips wrote:
> http://d.puremagic.com/issues/show_bug.cgi?id=8001
>
>            Summary: Alias this takes ownership of explicit cast
>            Product: D
>            Version: D2
>           Platform: All
>         OS/Version: All
>             Status: NEW
>           Severity: normal
>           Priority: P2
>          Component: DMD
>         AssignedTo: nobody at puremagic.com
>         ReportedBy: Jesse.K.Phillips+D at gmail.com
>
>
> --- Comment #0 from Jesse Phillips 
> <Jesse.K.Phillips+D at gmail.com> 2012-04-29 07:41:14 PDT ---
> When attempting to downcast a class which uses alias this, the 
> operation fails
> because the cast is applied to the item aliased.
>
> I think the semantics should be to attempt an implicit cast 
> (alias this), then
> a cast of the top class, afterwards the alias this item can be 
> casted.
>
> test.d(3): Error: e2ir: cannot cast a.val of type int to type 
> test.B
>
> void main () {
>     A a = new B();
>     B b = cast(B) a;
> }
>
> class A {
>     int val;
>     alias val this;
> }
> class B : A {}

Workaround:

import std.stdio;

class A {
    int val;

    alias val this;
}

class B : A { }

void main () {
    A a = new B();
    B* b = cast(B*) &a;
}

But i have no idea how this can work implicit as long as this bug 
isn't fixed.
Maybe it can work with an opCast in B, which cast first to B* and 
then to B.


More information about the Digitalmars-d-bugs mailing list