[Issue 20010] allow cast of type, not only expressions

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jun 5 13:16:27 UTC 2024


https://issues.dlang.org/show_bug.cgi?id=20010

Bolpat <qs.il.paperinik at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |qs.il.paperinik at gmail.com

--- Comment #1 from Bolpat <qs.il.paperinik at gmail.com> ---
I’d be in favor of the cast.

Grammar:
```diff
    CastQual:
-       cast ( TypeCtors? ) UnaryExpression
+       cast ( MemberFunctionAttributes? ) UnaryExpression
+       cast ( ... MemberFunctionAttributes ) UnaryExpression
+       cast ( ! ...[opt] MemberFunctionAttributes ) UnaryExpression
```

Note that `MemberFunctionAttributes` includes `TypeCtors`.

Semantics of `cast()` must remain so that it only removes `TypeCtor`s. To
remove other things, either use e.g. `cast(@system)` or fix
https://issues.dlang.org/show_bug.cgi?id=24587.

One issue I see, however, is with delegate types: `cast(immutable)` would
produce `immutable(R delegate())` and there’s no way to go from `R delegate()`
to `R delegate() immutable` with a cast. This is what the second rule does: It
applies the member function attribute to the function type even if it’s a type
qualifier.

`cast(pure)` is unambiguous, so it doesn’t require `cast(... pure)`, but
`cast(... pure)` should be legal. The `...` essentially becomes
`typeof(UnaryExpression)`.

As for Issue 24587 (negated forms), that’s the last rule: `cast(! ... const)`
removes `const` as a member function attribute.

--


More information about the Digitalmars-d-bugs mailing list