[Issue 7706] New: Comparing struct rvalues
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Mar 13 21:17:19 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7706
Summary: Comparing struct rvalues
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: spec
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: k.hanazuki at gmail.com
--- Comment #0 from Kasumi Hanazuki <k.hanazuki at gmail.com> 2012-03-13 21:17:28 PDT ---
The spec says in operatoroverloading.dd:
| Comparison operations are rewritten as follows:
| ``a < b'' to ``a.opCmp(b) < 0'' or ``b.opCmp(a) > 0''
and
| If structs declare an opCmp member function, it should follow the following
form:
|
| struct S {
| int opCmp(ref const S s) const { ... }
| }
If you follow these specs, you cannot accept comparison between two rvalues.
For example S(0) < S(1), which is rewritten as S(0).opCmp(S(1)), is rejected
_correctly_ by current DMD implementation (2.059HEAD).
In order to resolve this problem, comparison operators on struct types must be
translated as follows:
a < b
to (const _tmpb = b), a.opCmp(_tmpb) < 0
or (const _tmpa = a), b.opCmp(_tmpa) > 0
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list