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

Reply via email to