On this page http://dlang.org/operatoroverloading.html#Binary, is this statement:

"The expression:

a op b
is rewritten as both:

a.opBinary!("$(METACODE op)")(b)
b.opBinaryRight!("$(METACODE op)")(a)"

Which is true when a or b is object or struct, but it doesn't work for basic type or arrays wih ufcs.

I mean this:

import std.stdio;

struct S
{
    bool opBinaryRight(string op, T)(T element)
    if (op == "in")
    {
        return true;
    }
}

bool opBinary(string op, T)(T element, T[] array)
if (op == "in")
{
    return true;
}

void main(string[] args)
{
    S s;
    int a;
    int[] b;
    writeln(a.opBinary!"in"(b)); // ok
    writeln(s.opBinaryRight!"in"(a)); // ok
    writeln(a in s); // ok
    writeln(a in b); // doesn't compile
}

Reply via email to