DIP 1028---Make @safe the Default---Community Review Round 1
Walter Bright
newshound2 at digitalmars.com
Fri Jan 3 11:39:14 UTC 2020
On 1/2/2020 11:40 PM, H. S. Teoh wrote:
> Another issue is that taking the address of locals is verboten in @safe
> code. It's generally found in self-contained code, but becomes a problem
> across 3rd party library API boundaries: if an API requires a pointer
> there's not much you can do about it without waiting for an upstream fix
> (which will break API with older code).
In my experience, the fix for such things is to use `ref T` instead of `T*`. I
know you can't change 3rd party code, so simply label those as @system and move
on after filing an enhancement request to the 3rd party.
Or you can do this:
---- from 3rd Party ----
module fromThirdParty;
@system U thirdParty(T* p);
---- your code ----
import fromThirdParty;
@trusted U thirdParty(ref T t) { return fromThirdParty.thirdParty(&t); }
...
@safe void myParty()
{
T local;
thirdParty(local);
}
Inlining will remove the wrapper call.
More information about the Digitalmars-d
mailing list