On Tuesday, 6 March 2012 at 06:27:31 UTC, Jonathan M Davis wrote:
scope(failure) is _not_ guaranteed to always execute on failure. It is _only_ guaranteed to run when an Exception is thrown. Any other Throwable - Errors included - skip all finally blocks, scope statements, and destructors. That's one of the reasons why it's so horrible to try and catch an Error.
Maybe not guaranteed, but this happens: code: import std.stdio; void main() { scope(failure) writeln("bad things just happened"); int[] x = new int[4_000_000_000_000_000_000]; } output: bad things just happened core.exception.OutOfMemoryError