On 01/03/2012 05:41 PM, simendsjo wrote:
I guess this is as designed, but I'll ask anyway.

http://dlang.org/operatoroverloading.html#Cast says an expression is
rewritten to opCast "whenever a bool result is expected".

This is true for
if(e) somethingElse
and e && somethingElse

, but not for other parts.
assert(cast(bool)e == true); // explicit cast works
assert(e == true); // Error: incompatible types for ((s) == (false)):
'S' and 'bool'

There is no 'bool result expected': The relation of the two operands in == is symmetric. You could just as well say that the result of 'true' is expected to be of type typeof(e).



is(typeof(e) : bool); // false

This tests whether or not typeof(e) implicitly converts to bool, which can be false even if an explicit cast would succeed.

Reply via email to