On Monday, 6 August 2012 at 13:59:30 UTC, jerro wrote:
Wouldn't you have the exact same problem with implicit casts in
C++? If you want to use custom operators, you should just
define those, same as you would in C++. You can even implement
just some operators and use alias this for functionality that
you don't want to reimplement, like this:
import std.stdio;
struct A
{
int a;
alias a this;
auto opOpAssign(string op, T)(T b)
if(op == "+" && is(typeof(a += T.init)))
{
a += b;
writeln("opOpAssign!\"+\" called.");
}
}
void main()
{
auto a = A(3);
a += 5u;
writeln(a);
writeln(a - 1);
}
This prints:
opOpAssign!"+" called.
8
7
Oh... I've had a pretty longstanding misunderstanding then. I
tested something like that a while ago, and didn't manage to get
the custom operator called. Instead the aliased type's default
operator was called. Then I assumed that's how alias this worked.
I must have done something wrong back then, I don't know, can't
find that test code anymore.