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'

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

Reply via email to