@noreturn property

Iain Buclaw ibuclaw at ubuntu.com
Thu Oct 21 06:23:44 PDT 2010


== Quote from Lars T. Kyllingstad (public at kyllingen.NOSPAMnet)'s article
> On Thu, 21 Oct 2010 11:54:26 +0000, Iain Buclaw wrote:
> > A few standard library functions, such as 'abort' and 'exit', cannot
> > return. However there is no way in DMD to let the compiler know about
> > this. Currently in D2, you must either have a 'return' or 'assert(0)'
> > statement at the end of a function body. It would be nice however if you
> > can give hints to the compiler to let it know that a function is never
> > going to return.
> >
> > Example:
> >
> > @noreturn void fatal()
> > {
> >     print("Error");
> >     exit(1);
> > }
> >
> > The 'noreturn' keyword would tell the compiler that 'fatal' cannot
> > return, and can then optimise without regard to what would happen if
> > 'fatal' ever did return. This should also allow fatal to be used instead
> > of a return or assert statement.
> >
> > Example:
> >
> > int mycheck(int x)
> > {
> >     if (x > 1)
> >         return OK;
> >     fatal();
> > }
> >
> >
> > Thoughts?
> It would be useful for std.exception.enforce(), as you could end a
> function with enforce(false).
> -Lars

Or with any of the helper functions in core.exception, for that matter; such as
onOutOfMemoryError().

Regards
Iain


More information about the Digitalmars-d mailing list