opCast for classes
Ali Çehreli
acehreli at yahoo.com
Tue Mar 12 13:17:32 PDT 2013
On 03/12/2013 01:08 PM, "Luís Marques" <luismarques at gmail.com>" wrote:
> Hi there,
>
> I've been away for a while from the D world, so I guess I missed some of
> the new things.
>
> Regarding opCast, the documentation says:
>
> "This only happens, however, for instances of structs. Class references
> are converted to bool by checking to see if the class reference is null
> or not."
>
> Yet this works:
>
> class B
> {
> bool v;
>
> this(bool v)
> {
> this.v = v;
> }
>
> T opCast(T)()
> {
> return v;
> }
> }
>
> unittest
> {
> B bfalse = new B(false);
> B btrue = new B(true);
> assert(cast(bool) bfalse == false);
> assert(cast(bool) btrue == true);
> }
>
> Is that a new feature? Can I rely on it? Is it documented somewhere?
>
> Thanks! :-)
>
> Regards,
> Luís
I don't know what the intended behavior but there is a distinction
between automatic vs. implicit. These pass as well:
assert(bfalse);
assert(btrue);
So, apparently implicit conversion considers the class variable and
explicit conversion considers the class object. And this produces a
compilation error:
B bnull;
assert(cast(bool)bnull);
Error: null dereference in function _D6deneme19__unittestL123991_1FZv
Ali
More information about the Digitalmars-d
mailing list