[Issue 14935] [Operator Overloading] Wrong description on overloading a[]

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Thu Aug 20 08:58:32 PDT 2015


https://issues.dlang.org/show_bug.cgi?id=14935

--- Comment #7 from ag0aep6g at gmail.com ---
(In reply to Ryuichi OHORI from comment #6)
> I agree with you on closing this as invalid. The main problem was that I
> missed opIndexOpAssign and tried to use opIndex/opSlice (of a struct S) +
> opOpAssign (of the returning Voldemort type of S.opIndex).
>
> While I went wrong, the error message "cannot be sliced with []" is not so
> helpful as to help me figuring out the problem.

If I understand correctly, you're describing something like this:

----
struct V
{
    void opOpAssign(string op)(int x) {}
}
struct S
{
    V opIndex() {return V();}
}
void main()
{
    S s;
    s[] += 2; /* Error: S cannot be sliced with [] */
}
----

That error message really doesn't help. And it actually works when you use a
temporary variable to hold the result of s[]:

----
S s;
auto v = s[];
v += 2; /* no error */
----

So I'd say that's a rejects-valid bug. I filed issue 14941 for that.

> One of the reasons I missed opIndexOpAssign was that it is categorized under
> Op Assignment Operator Overloading. I'd like to place it under Array
> Indexing and Slicing Operators Overloading.

I don't know where it fits best. Maybe just make a pull request and see how it
goes.

--


More information about the Digitalmars-d-bugs mailing list