On 7/3/21 1:20 PM, Luis wrote:
This is intentional ?
```
should(function void() {
auto emptyStack = SimpleStack!int();
scope(exit) emptyStack.free; // <= This is never called
emptyStack.reserve(16);
emptyStack.top;
}).Throw!RangeError;
```
scope(exit) inside of a anonymous functions, it's never called.
In principle, it should technically be called.
But in practice, the compiler does not have to clean up anything when an
`Error` is thrown. Whether it does or not is defined by the implementation.
However, it should *always* work if it's an `Exception` and not an `Error`.
```d
import std.stdio;
void main()
{
auto f = function void() {
scope(exit) writeln("hi");
throw new Exception("boo");
};
f();
}
```
prints "hi"
-Steve