Summary: Comparing struct rvalues
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: spec
          Severity: normal
          Priority: P2
         Component: DMD

--- Comment #0 from Kasumi Hanazuki <> 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''


| If structs declare an opCmp member function, it should follow the following
| 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:
------- You are receiving this mail because: -------

Reply via email to