Implicit conversion to bool, and other conversions.

Carl Sturtivant sturtivant at gmail.com
Fri Aug 16 21:39:53 PDT 2013


On Friday, 16 August 2013 at 22:11:24 UTC, Jonathan M Davis wrote:
> On Friday, August 16, 2013 23:18:51 Carl Sturtivant wrote:
>> The operator overloading page in the Language Reference and the
>> operator overloading discussion in TDLP say different things 
>> about
>> T opCast(bool)() if(is(T==bool))
>> and experimentally it seems that in any context where a bool is
>> expected and x occurs (where x is a struct with such an opCast
>> defined) then x will be rewritten as its conversion to bool 
>> using
>> that opCast.
>> 
>> Please confirm that the above is generally true or tell me the
>> exact rules.
>> 
>> Are there any other implicit conversions possible in D (apart
>> from int to long, int to double and so forth)?
>
> opCast is only ever for explicit conversions. alias this is 
> used for implicit
> conversions.
>
> Whether things get confusing is that there are places where the 
> compiler
> inserts casts for you, so it _looks_ like there's an implicit 
> conversion, but
> there isn't really. In particular, cast(bool) is inserted in 
> the conditions of
> if statements, loops, ternary operators, and assertions. So, if 
> you have
> something like
>
> if(a) {}
>
> it becomes
>
> if(cast(bool)a) {}
>
> So, if you want to use a struct in a condition, you overload 
> opCast for bool,
> but if you want it to implicitly convert to bool in general, 
> then you use
> alias this.
>
> - Jonathan M Davis

I hadn't fully understood alias this, i.e. that one may alias 
what becomes effectively a conversion function of no arguments. 
Thank you for pointing me in that direction.



More information about the Digitalmars-d-learn mailing list