cast(function qualifier)
Quirin Schroll
qs.il.paperinik at gmail.com
Thu May 16 17:06:04 UTC 2024
On Thursday, 2 May 2024 at 07:46:48 UTC, Jonathan M Davis wrote:
> That being said, one concern that I can think of is that it
> arguably makes
> cast() inconsistent. Right now, casting with an attribute only
> works with
> type qualifiers, so it makes sense that cast() would remove all
> type
> qualifiers. However, if stuff like cast(pure) or cast(nothrow)
> is legal,
> then I could see someone expecting that cast() would remove
> those as well,
> which seems like it would be a bad idea in practice (as well as
> being a
> breaking change). But if we don't make cast() remove pure,
> nothrow, etc.,
> then it could be argued that that's inconsistent. I'm not sure
> that that
> inconsistency is worth worrying about, but I could see it
> coming up at some
> point.
Another good argument to add `@gc` and `@impure`. Then, one can
`cast(@gc)` to remove a `@nogc` attribute.
Another option would be to extend `cast` to allow for negated
stuff: `cast(!const)` would remove `const`, but not other type
qualifiers, e.g. `inout` or `shared`. In particular,
`cast(!shared)` would be useful to remove `shared` whilst not
touching `const` accidentally. Same would work for function
attributes: `const(!pure)` removes `pure`, but doesn’t touch type
qualifiers or other attributes.
More information about the dip.ideas
mailing list