On Tuesday, 5 August 2014 at 20:50:06 UTC, Jeremy Powers via Digitalmars-d wrote:

Well, yes: Undefined behaviour in the sense

"And there will be no injection of undefined behaviour
                                   ^~~~~~~~~~~~~~~~~~~
                                   conventional sense


- the undefined behaviour is already there if the asserted constraints
       ^~~~~~~~~~~~~~~~~~~
       altered sense

are not valid."



I still don't quite see your point. Perhaps I should have said: In the case where an asserted constraint is not met, the program is invalid.
 Being invalid it has undefined behaviour if it continues.

From another:

There is a difference between invalid and undefined: A program is invalid ("buggy"), if it doesn't do what it's programmer intended, while "undefined" is a matter of the language specification. The (wrong) behaviour of an invalid program need not be undefined, and often isn't in
practice.


I disagree with this characterization. Something can be buggy, not doing what the programmer intended, while also a perfectly valid program. You can make wrong logic that is valid/reasonable in the context of the program.

Invalid in this case means the programmer has explicitly stated certain constraints must hold, and such constraints do not hold. So if you continue with the program in the face of invalid constraints, you have no
guarantee what will happen - this is what I mean by 'undefined'.

You're using a nonstandard definition of undefined behavior. Undefined behavior has a precise meaning, that's why Timon linked the wiki article for you.

The regular definition of assert does not involve any undefined behavior, only the newly proposed one.

Reply via email to