On Thursday, 29 September 2016 at 12:28:54 UTC, Tomer Filiba wrote:
Consider this code

struct MyTable {
    bool opBinaryRight(string op: "in")(int x) {
        return true;
    }
}

Now let's use it:

MyTable m1;
assert(5 in m1);

Everything works as expected. Now suppose I had a const object object

const MyTable m2;
5 in m2; // Error: rvalue of in expression must be an associative array, not const(MyTable)

A super-cryptic error message. First of all, "in expressions" are not limited to associative arrays. Second, the error makes me think I didn't implement the operator -- but I did.

Indeed, please someone has to fix this !

Instead, supposed I had a `contains` method instead,

m2.contains(5); // Error: mutable method dtest.MyTable.contains is not callable using a const object

I also think that "mutable method" means anything. If the meaning is that the method can change the object state then "muting method" would be better.

Which is the real error, of course, the one I would have hoped to get in the first place. My code was templated and got a `T table`, so it was nearly impossible to guess that `T` was actually `const MyTable`

I understand operators go through rewriting rules, but it's nearly impossible to understand what's wrong with code with such errors.


-tomer


Reply via email to