opIndexAssign

Timon Gehr timon.gehr at gmx.ch
Thu Oct 5 12:00:22 UTC 2023


On 10/3/23 00:11, Salih Dincer wrote:
> Hi,
> 
> opIndexAssign, which is void, cannot compromise with opIndex, which is a 
> ref!  Solution: Using opSliceAssign.  Could this be a bug?  Because 
> there is no problem in older versions (e.g. v2.0.83).
> 
> ```d
> struct S
> {
>    int[] i;
> 
>    ref opIndex(size_t index) => i[index];
> 
>    auto opSliceAssign/*
>    auto opIndexAssign//*/
>    (int value) => i[] = value;
> }
> 
> void main()
> {
>    auto s = S([1, 2]);
> 
>    s[] = 2;
>    assert(s.i == [2, 2]);
> 
>    s[1] = 42;
>    assert(s.i == [2, 42]);
> }
> ```
> **Source:** https://run.dlang.io/is/G3iBEw
> If you converted comment line 7 with // and you will see this error:
> 
>> onlineapp.d(19): Error: function `onlineapp.S.opIndexAssign(int 
>> value)` is not callable using argument types `(int, int)`
>> onlineapp.d(19):        expected 1 argument(s), not 2
> 
> SDB at 79


void opIndexAssign(int value, int index){ i[index] = value; }


More information about the Digitalmars-d-learn mailing list