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