On Tuesday, 22 December 2020 at 14:27:02 UTC, ag0aep6g wrote:
On 22.12.20 04:56, 9il wrote:
6. Algebraic type subsets are supported by `get`, `trustedGet`, `_is`, and `this` primitives. You can operate with algebraic subset as with the type of the original typeset. [1]

"trustedGet" - That name smells of a safety violation. And indeed (compile with `-release`):

The normal `get` also violates safety by giving out references into the union (compile with `-preview=dip1000`):

But that might be an issue with DIP1000. `ref_to_ptr` is a hint that something isn't right in that area.

The definitions are

```
auto ref get(E)() @property return inout
auto ref trustedGet(E)() @trusted @property return inout nothrow
```

Both market with `return`.

According to the spec [1, example 2]

"Struct non-static methods marked with the return attribute ensure the returned reference will not outlive the struct instance."

The docs maybe not clear enough. `trustedGet` asserts type is matched, while `get` throws an exception if the type doesn't match.

[1] https://dlang.org/spec/function.html#return-ref-parameters

Reply via email to