On 29/05/2011 09:44, simendsjo wrote:
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.

There are places where the spec fails to make a clear distinction between illegal code and incorrect code that the compiler may reject if it's smart enough.

The point of asserts is to check that the code is working correctly. By the time you come to release your software, you know that it's working correctly, and so the compiler ignores asserts in release mode. So the onus is on you to make sure the asserts don't have side effects.

module assert_sideeffect;
bool b;
bool f() { b = !b; return b; }
void main() {
assert(f()); // oops.. changes b in debug mode
<snip>

It doesn't depend on debug mode. It depends on release mode. They're two independent compiler switches.

Stewart.

Reply via email to