On Tuesday, 27 September 2016 at 10:55:47 UTC, John Colvin wrote:
but we don't (yet) have catch else, which is harder to immitate. Options are: A) the else clause is nothrow (in which case it can just go last inside the try)
or
B) store a flag and have to use immitation finally:

{
    /*finally*/ scope (exit) {}
    bool exceptionThrown = false;
    try {
        doSomething();
    } catch (Exception e) {
        exceptionThrown = true;
    }
    /*else*/ if (!exceptionThrown) {}
}

C) Use collectException:

import std.exception;
auto ex = collectException!MyException(doSomething());
if (ex) handleException(ex);
else {
    // doSomething succeeded
    ...
}

collectException could be improved to catch more than one type of exception, returning the common type. Alternatively it could maybe return a tuple of the exception and the 1-based index of which type of exception was thrown.

Reply via email to