On Tue, 22 Apr 2014 18:54:41 -0400, Meta <[email protected]> wrote:

On Tuesday, 22 April 2014 at 21:35:31 UTC, Meta wrote:
Does this work if test is in a different module from main?

struct test
{
        private int opBinary(string op: "*")(test other) { return 3; }
        public alias opMul = opBinary!"*";
}

void main()
{
        test t1 = test();
        test t2 = test();
        auto n = t1 * t2;
        assert(n == 3);
}

And it appears it does.

This changes the dynamics. opMul is not a template, which is important for classes.

This also works, and if encapsulated into a mixin, will be a drop-in fix for existing opMul and friends code:

struct test
{
alias opBinary(string op: "*") = blah; // to demonstrate it's not actually calling opMul because of old-style operators

   int blah(test other) {return 3;}
}

BTW, I don't know when template alias got so cool, but I like it :)

-Steve

Reply via email to