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