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