On 1/27/18 9:31 AM, Ali Çehreli wrote:
On 01/27/2018 05:52 AM, kdevel wrote:
 > https://dlang.org/phobos/std_exception.html#enforce states:
 >
 > | Also, do not use enforce inside of contracts (i.e. inside of in and
 > out blocks
 > | and invariants), because they will be compiled out when compiling with
 > -release.
 > | Use assert in contracts.
 >
 > But assert is also ignored in release mode:

The documentation is not clear. "they will be compiled out" means "contracts are compiled out". So, an enforce() would disappear if it's inside such a block, which should not be what the programmer wants for an enforce().

There is another problem with using enforce in contracts, it throws Exceptions, whereas contracts are expected to throw Errors. The most important aspect about this is that nothrow functions can still throw Errors. So if you have a nothrow function with an in-contract that throws an Exception, compiling in release mode may is a mistake (I'm not sure if the compiler even detects this).

I think the current docs (as they have been modified) are fine.

Fixed it through the "Improve this page" link on that Phobos page:

   https://github.com/dlang/phobos/blob/master/std/exception.d

Ali

Hm... it appears that you committed directly to the branch. Even if changing docs, you should do so with a pull request.

For normal mortals, this happens automatically, but for people who have commit rights, you have to be careful to select the right thing ;)

-Steve

Reply via email to