You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
People write stuff like :
mixin("alias Func = " ~ typeof(&impl).stringof ~ " pure nothrow;");
to set the attributes of a function. We could have something like
alias Func = cast(pure nothrow) typeof(&impl);
or even using the TypeCtor style
alias Func = pure(nothrow(typeof(&impl)));
This probably requires a DIP but I open an issue to keep track of the idea.
The text was updated successfully, but these errors were encountered:
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.
basile-z reported this on 2019-06-29T10:14:30Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=20010
CC List
Description
People write stuff like : mixin("alias Func = " ~ typeof(&impl).stringof ~ " pure nothrow;"); to set the attributes of a function. We could have something like alias Func = cast(pure nothrow) typeof(&impl); or even using the TypeCtor style alias Func = pure(nothrow(typeof(&impl))); This probably requires a DIP but I open an issue to keep track of the idea.The text was updated successfully, but these errors were encountered: