Jonathan M Davis wrote:

> Assertions assert that something is _always_ true and that if it isn't, the
> program is wrong, while exceptions are for exceptional circumstances

Makes sense.

> You use [enforce] when you want an exception thrown rather than when you want to
> kill your program due to an error.

To further confuse the issue, assert throws too:

import std.stdio;
import std.algorithm;

void main()
{
    try {
        assert(false);
    } catch (Throwable) {
        writeln("an assertion failed");
    }
}

The difference is just the exception that is thrown. Throwable seems to be most general.

From what I've read so far, I take enforce as a replacement to what it exactly is:

if (condition) {
    throw /* ... */;
}

Since I never use assert for that purpose, I take enforce as a shortcut for the above.

Ali

Reply via email to