On Thu, 10 Feb 2011 07:59:06 -0500, spir <denis.s...@gmail.com> wrote:

Hello,

Implicite deref of struct pointers on member access works fine for data, methods, even special methods with language semantics like opEquals (see example below).
But I cannot have 'in' work with method opIn_r. I get:
     Error: rvalue of in expression must be an associative array, not S*
What do I have wrong? Or is it a bug: the compiler does not even search the struct for opIn_r? But then, why does it do it for opEquals?

Denis

struct S {
     int i;
     void show() { writeln(i); }
     const bool opEquals (ref const(S) s) {
         writeln("==");
         return (i == s.i);
     }
     bool opIn_r (int j) { return (i==j); }
}
unittest {
     S* sp = &(S(1));
     writeln(sp.i);
     sp.show();
     S s2 = S(1);
     writeln(sp == s2);
     writeln(1 in sp);
}


There is a bug in the compiler that the message says associative array is required. There is a bugzilla issue somewhere on that...

But it does look like it should work, I'd file a separate bugzilla on the opIn_r not working.

-Steve

Reply via email to