Assert allowed to have side effects?

simendsjo simen.endsjo at pandavre.com
Sun May 29 01:44:54 PDT 2011


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


More information about the Digitalmars-d-learn mailing list