The documentation for assert,
http://www.digitalmars.com/d/2.0/expression.html#AssertExpression,
states that it's an error if the assert expression contains side
effects, but it doesn't seem the compiler is enforcing this.
module assert_sideeffect;
bool b;
bool f() { b = !b; return b; }
void main() {
assert(f()); // oops.. changes b in debug mode
if(!b) { // true only in release
assert(0);
}
}
dmd -g -w -wi -debug -run assert_sideeffect
// no output
dmd -g -w -wi -release -run assert_sideeffect
object.Error: assert(0) or HLT instruction