@noreturn property

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Thu Oct 21 05:52:35 PDT 2010


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


More information about the Digitalmars-d mailing list