How the heck is onInvalidMemoryOperationError() nothrow?

tsbockman via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 5 20:24:23 PDT 2016


On Friday, 6 May 2016 at 02:57:59 UTC, Jeremy DeHaan wrote:
> In core.exception, we have a lovely function called 
> onInvalidMemoryOperationError(). This function is marked as 
> nothrow (plus other annotations). This function literally does 
> nothing except throwing an error. How can it be marked as 
> nothrow?

 From the spec 
(https://dlang.org/spec/function.html#nothrow-functions):
     "Nothrow functions can only throw exceptions derived from 
class Error."

Throwing an Error is, for many purposes, considered fundamentally 
different than throwing an Exception because Error objects aren't 
meant to be caught by user code. Throwing an Error is supposed to 
just be a way of crashing the program with a nice message and 
stack trace.

A key benefit of this distinction, is that it enables the use of 
`assert()` statements in `nothrow` code.


More information about the Digitalmars-d-learn mailing list