On Thursday, 11 September 2025 at 11:47:40 UTC, Dennis wrote:
The trick that's used in druntime is putting the part that
still needs to be checked for attributes inside an `if (false)`
block, for example:
```d
private T moveImpl(T)(return scope ref T source)
{
// Properly infer safety from moveEmplaceImpl as the
implementation below
// might void-initialize pointers in result and hence needs
to be @trusted
if (false) moveEmplaceImpl(source, source);
return trustedMoveImpl(source);
}
```
Well, that would work. Thank you for pointing it out. It's
probably better to do it like this to avoid the potential for an
unconditional cache miss (depending on how smart the compiler
feels today):
```d
private T moveImpl(T)(return scope ref T source){
if(true) return trustedMoveImpl(source);
moveEmplaceImpl(source, source);
assert(0);
}
```
It would still be nice to have a proper, intuitive way of doing
this though. Hacks are great and all, but they are still hacks.
One time I got my code to call into Swift code by writing inline
assembly to match Swift's calling convention; but that was a
hack, and I'm still excited that LDC has recently gained some
degree of native Swift interoperability.