On Saturday, 28 December 2013 at 20:31:14 UTC, TheFlyingFiddle
wrote:
int foo()
{
scope(failure) return 22;
throw new Exception("E");
}
unittest
{
assert(foo() == 22);
}
Is this defined behavior? At least in x64 dmd the exception is
swallowed and the assert evaluates to true.
In any case what should happen? Should the method return or
should the exception be propagated up the callstack?
It's rewritten as follows:
int foo()
{
try {
throw new Exception("E");
} catch (Exception e) { // or whatever the D syntax is, I
never used it
return 22;
}
}
So yes, it's intended. scope(exit) uses finally instead of catch.