On Sunday, 3 August 2014 at 15:28:43 UTC, Manu via Digitalmars-d
wrote:
I'm thinking this would make all the difference:
scope(failure, MyException e) // only executed for exceptions
of type
MyException
{
writeln(e.msg); // can refer to the exception in this failure
block
return failureValue; // and can gracefully return from the
function too
}
That would eliminate about 80% of my try/catch blocks.
The remaining suffer from the problem where I want to respond
to exceptions
NOT of a specific type, ie, clean up in the case of an
unexpected/unknown
exception.
scope(failure, ~MyException)
{
// clean up, because some unexpected exception occurred that
I don't/can't handle.
}
The easiest thing would be to provide a thread-local reference to
the currently in-flight exception. Then you could do whatever
checking you wanted to inside the scope block.