Alias this and inheritance

ag0aep6g anonymous at example.com
Sun Nov 5 10:38:45 UTC 2017


On Sunday, 5 November 2017 at 07:07:43 UTC, Aurelien Fredouelle 
wrote:
> struct S { }
>
> class A
> {
>   S s;
>   alias s this;
> }
>
> class B : A
> {
> }
>
> void main()
> {
>   A asA = new B;
>   B asB = cast(B)asA;
> }
>
> I would expect the last line to successfully cast the B 
> instance I created back into type B, however this seems to be 
> preempted by the alias this:
>
> Error: cannot cast expression asA.s of type S to app.B
>
> Is there a way to force this cast to operate on the object of 
> type A instead of automatically using A.s?

Known issue: https://issues.dlang.org/show_bug.cgi?id=6777

You can work around by casting to Object first:

     B asB = cast(B) cast(Object) asA;



More information about the Digitalmars-d-learn mailing list