On Friday, 31 July 2026 at 13:52:12 UTC, Vindex9 wrote:
Is this code normal? Why can't it be marked with `@safe`? Can
only `idup` be used for `@safe` in such cases?
```d
string fn() @trusted pure {
char[] arr;
// some manipulations...
return cast(string) arr;
}
```
Where is the line between cases where the `@trusted` tag can be
used and cases where the `@system` tag can be used?
The cast is not memory safe because it breaks the type system
(`string` element-type is `immutable(char)` and `immutable` is
part of the type). So callers may think that the elements are
indeed immutable while they are actually allowed to change.
But for a simple example like this it's obvious that the problem
wont happen (i.e mutation of the elements), hence you can mark
the function `@trusted`.
spec: https://dlang.org/spec/memory-safe-d.html