Cast converts AA to rvalue?
Johan
j at j.nl
Wed Aug 10 08:20:56 UTC 2022
On Wednesday, 10 August 2022 at 00:28:53 UTC, Steven
Schveighoffer wrote:
> On 8/9/22 7:02 PM, Johan wrote:
>> Testcase:
>> ```
>> shared int[int] aa;
>> void main () {
>> cast()aa[1] = 1;
>> }
>> ```
>>
> If you use `cast()(aa[1]) = 1`, it has a range error even on
> older versions.
>
> That it ever worked is puzzling.
I think old compilers parsed it as `(cast()aa)[1]`, which works
on newer compilers too without range error.
In my case, `aa` is also `immutable`. The only way I know how to
make it work is now pretty ugly (casting away immutable should be
ugly, so perhaps it's OK...):
```
shared immutable int[int] aa;
void main () {
// (cast()aa)[1] = 1; // works without immutable
(*cast(int[int]*)(&aa))[1] = 1;
}
```
More information about the Digitalmars-d-learn
mailing list