On 03/21/2014 06:12 AM, Kapps wrote:
On Thursday, 20 March 2014 at 21:32:08 UTC, dnspies wrote:
Sorry, I don't understand.  When I cast something to the wrong
type, I should just get a null reference, shouldn't I?  It
shouldn't throw an error.

If the compiler can statically determine that the cast is invalid you
get an error instead.

No.

class C{}
class D{}

void main(){
    C c=new C;
    D d=cast(D)c; // no error
    assert(c !is null);
    assert(d is null);  
}

(In any case, his problem is that the cast fails in CTFE.)

You can use something like 'static if(is(T :
Foo))' to test at compile-time if T is implicitly convertible to Foo
(I'm not certain the exact semantics) or 'static
if(is(typeof(cast(Foo)T.init)))'.

There's probably better ways to do it, and I recommend asking on D.learn
to figure out how to do what you're looking for.


I guess it might be a compiler bug, but it is hard to tell lacking a complete example.

Reply via email to