@noreturn property

Steven Schveighoffer schveiguy at yahoo.com
Thu Oct 21 06:14:01 PDT 2010


On Thu, 21 Oct 2010 08:52:35 -0400, Lars T. Kyllingstad  
<public at kyllingen.nospamnet> wrote:

> 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).

1. It doesn't work that way.  The function has to *never* return, no  
matter what the arguments.
2. assert(false) already does this.

-Steve


More information about the Digitalmars-d mailing list