On Sunday, 26 August 2018 at 10:17:51 UTC, Walter Bright wrote:
I'm not sure what you're referring to. I'm referring to the
specified message, and the example:
struct Array
{
int[] _payload;
~this() // (2)
{
import core.stdc.stdlib : free;
free(_payload.ptr); // (3)
}
}
class Scanner
{
Array arr;
this() @safe {} // (1)
}
In order for (1) to be @safe, then the destructor it calls for
arr (2) must also be @safe. But the destructor calls free()
(3), which is not @safe. Therefore, the compilation fails.
Inference does not solve this problem, because (2) is inferred
as @system.
Yes but if Scanners constructor is nothrow then all is fine,
since it won't unwind unless an error is thrown in which case it
game over anyway.