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
  • cast(string) for... Vindex9 via Digitalmars-d-learn
    • Re: cast(st... user1234 via Digitalmars-d-learn
      • Re: cas... H. S. Teoh via Digitalmars-d-learn
        • Re:... H. S. Teoh via Digitalmars-d-learn
      • Re: cas... Richard (Rikki) Andrew Cattermole via Digitalmars-d-learn
    • Re: cast(st... Nick Treleaven via Digitalmars-d-learn
    • Re: cast(st... Kagamin via Digitalmars-d-learn
      • Re: cas... Kagamin via Digitalmars-d-learn
        • Re:... Vindex9 via Digitalmars-d-learn
          • ... Jonathan M Davis via Digitalmars-d-learn
          • ... Vindex9 via Digitalmars-d-learn

Reply via email to