Never-returning functions

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Aug 2 08:46:22 PDT 2016


On 8/2/16 11:34 AM, Enamex wrote:
> On Tuesday, 2 August 2016 at 15:18:31 UTC, Steven Schveighoffer wrote:
>> What's wrong with assert(0) that you need to have a wrapper function
>> for it?
>>
>> -Steve
>
> Nothing wrong exactly. I just wanted some descriptive terms to use in
> some places. Like "unreachable()" or "unimplemented()".

Well, mixins could help:

enum unreachable = "assert(0)";

...
// usage
mixin(unreachable);

Or comments:

assert(0); // unreachable

> To be clear (and correct my original post now that I see it may have
> alluded to this), I want to say a function always 'throws', not
> necessarily asserts.

This kind of flow control I don't think the compiler will infer.

One thing you *could* do, is to define your function to return the 
appropriate return type, but of course it never will:

T alwaysThrows(T)() { throw new Exception("blammo!"); return T.init; }

int tryMe(bool f) {
     if(f) return 42;
     else return alwaysThrows!int; // or typeof(return)
}

-Steve


More information about the Digitalmars-d-learn mailing list