Thread overview | |||||
---|---|---|---|---|---|
|
January 15, 2014 operator overloading rewrite rules | ||||
---|---|---|---|---|
| ||||
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 } |
January 15, 2014 Re: operator overloading rewrite rules | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Kozak | On 01/15/2014 07:36 PM, Daniel Kozak wrote: > 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. It is this bug: https://d.puremagic.com/issues/show_bug.cgi?id=8062 The problem is that the spec is not explicit about this: "Operator overloading is accomplished by rewriting operators whose operands are class or struct objects into calls to specially named _member functions_." http://dlang.org/operatoroverloading.html Some consider it expected behaviour, based on the explicit mention of 'member function' in the spec. |
January 15, 2014 Re: operator overloading rewrite rules | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | On 01/15/2014 08:31 PM, Timon Gehr wrote: >> it doesn't work for >> basic type or arrays wih ufcs. > > It is this bug: https://d.puremagic.com/issues/show_bug.cgi?id=8062 Also, this enhancement: https://d.puremagic.com/issues/show_bug.cgi?id=9786 |
Copyright © 1999-2021 by the D Language Foundation