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 worksassert(e == true); // Error: incompatible types for ((s) == (false)): 'S' and 'bool'
is(typeof(e) : bool); // false
