[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