On Wednesday, 25 August 2021 at 14:04:54 UTC, WebFreak001 wrote:
Would it be possible to extend `scope(exit)` and
`scope(success)` to trigger properly for functions returning
`Expected!T` as defined in the
[expectations](https://code.dlang.org/packages/expectations)
and [expected](https://code.dlang.org/packages/expected) DUB
libraries?
For example is it possible to make this work as expected:
```d
Expected!int divide(int a, int b) nothrow
{
scope (failure) writeln("division failed");
scope (success) writeln("division succeeded");
if (b == 0) return err!int("division by zero");
return ok(a / b);
}
```
Probably the only principled way to make this work would be to
define some kind of "concept"/structural interface that's
recognized by the compiler to mean "this is an error-handling
type", in the same way that the compiler recognizes
`empty`/`front`/`popFront` to mean "this is an iterable type".
Even then, it would require some pretty invasive language changes
(and some pretty gnarly code in the compiler), but it's at least
*theoretically* possible.