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