On 05/17/2016 02:24 PM, Thorsten Sommer wrote:
Dear all,

I run into an issue with a simple cast:
https://dpaste.dzfl.pl/8e7f7c545eb1

I have a base class and a class A with inherit from that base class:
A <- BaseClass

If the base class contains an "alias this", any casting attempt fails
because the "alias this" type gets considered. Thus, I defined the
opCast() to solve this. But now, the program crashes without any error
or exception...

You've got an infinite recursion there.

`A a2 = to!A(b1);` calls `b1.opCast!A()` which calls `to!A(this)` which is the very same call as `to!A(b1)`, so it calls `opCast!A()` again, and so on until the stack is exhausted and the program crashes.

Why does the casting operation consider the "alias this" at all? I mean:
The "alias this" type is int. If I try to cast with to!A, obviously int
does not match A!?

There's an issue on this: https://issues.dlang.org/show_bug.cgi?id=6777

I don't know if there's a good reason for the current behavior. Looks silly to me.

Is there any practical solution? Or should I stop using "alias this" for
my classes? I like the "alias this" concept. But it caused some issue
for me...

You can use the reinterpreting style of cast to circumvent features like alias this and opCast:
----
A a2 = * cast(A*) &b1;
----

Reply via email to