Operator overloading through UFCS doesn't work
Tommi
tommitissari at hotmail.com
Sat Oct 13 02:41:07 PDT 2012
On Saturday, 13 October 2012 at 09:06:28 UTC, Jakob Ovrum wrote:
> Do note that this says *method* call. Your example doesn't use
> methods. Hence, the current state of operator overloading is
> consistent with TDPL.
I don't agree with the last sentence. According to TDPL:
1) "whenever at least one participant in an operator expression
is of user-defined type, the compiler rewrites the expression
into a regular method call with a specific name"
---------------------------------------------------------------
++var;
gets rewritten to:
var.opUnary!"++"();
2) "if a.fun(b, c, d) is seen but fun is not a member of a’s
type, D rewrites that as fun(a, b, c, d) and tries that as well"
----------------------------------------------------------------
So, because opUnary is not a member of var, compiler should
rewrite that as:
.opUnary!"++"(var);
More information about the Digitalmars-d-learn
mailing list