On 01.09.2018 22:15, Walter Bright wrote:
https://blog.regehr.org/archives/1091
As usual, John nails it in a particularly well-written essay.
"ASSERT(expr)
Asserts that an expression is true. The expression may or may not be
evaluated.
If the expression is true, execution continues normally.
If the expression is false, what happens is undefined."
Note the "may or may not be evaluated." We've debated this here before.
I'm rather pleased that John agrees with me on this.
He does not! John gives two definitions. The first definition is the one
I want, and he calls it _the best definition_. (I.e., all other
definitions are inferior.)
I.e. the optimizer
can assume the expression is true and use that information to generate
better code, even if the assert code generation is turned off.
The definition you quoted is the /alternative/ definition. He does not
call it the best definition, and even explains that it can be dangerous.
He says "it’s not an interpretation that is universally useful". (!)
I don't understand how you can conclude from this that John's view is
that this should be the default -release behavior of assertions.