Prevent self-comparison without taking the address

IchorDev zxinsworld at gmail.com
Thu Jul 25 15:06:35 UTC 2024


On Thursday, 25 July 2024 at 14:05:50 UTC, Dom DiSc wrote:
> As he said: no. It's only true for @safe:

No they did not, they specifically said that my assertion holds 
true for all other [function 
attributes](https://dlang.org/spec/attribute.html#function-attributes). This does not tell me anything about other attributes like `align`, `deprecated`, `@__future`, linkage attributes, visibility attributes, mutability attributes, shared storage attributes, `@system` variables, or UDAs.

> But that doesn't answer my question.

Your question was ‘Can I replace this pattern with `(x is 
this)`’. The answer is no.

> You said it is not the same. But then: is there another way to 
> translate the C++ pattern in a @safe way?

This is the first time you have mentioned this intention with 
words. I’m not a mind reader.
I think your function most likely has a safe interface, so it can 
be marked as `@trusted` as-per [the 
spec](https://dlang.org/spec/function.html#safe-interfaces). 
Let’s go through the checklist:
- undefined behaviour? Nothing undefined about comparing two 
numbers.
- creates unsafe values accessible by safe code? No it only 
returns a Boolean.
- unsafe aliasing accessible by safe code? No aliasing whatsoever.


More information about the Digitalmars-d-learn mailing list