On 18.04.2018 09:18, Walter Bright wrote:
On 4/15/2018 10:57 PM, Shachar Shemesh wrote:
It seems that the && evaluation does not stop when the first false is
found.
Evaluation does stop, semantic analysis does not. For example:
bool foo() {
return 0 && undefined_variable;
}
does not compile. I'd speculate that most would consider this code
compiling successfully as surprising behavior. It would also be
difficult to specify, as just when is e1 of (e1 && e2) statically known
at compile time (i.e. how much flow analysis is the compiler expected to
do to determine this?).
His use case is `enum x = 0 && undefined_variable;`, for which at least
your second concern does not apply. It is also surprising that a `static
if` condition cannot be hoisted out:
---
static if(expression){ ... }
---
---
// not necessarily the same as the above
enum c = expression;
static if(c){ ... }
---
I think the suggestion is to do lazy semantic analysis for all
standalone expressions that need to be evaluated at compile-time (and
not just for `static if`/`static assert` conditions).