Thread overview
[Issue 7706] New: Comparing struct rvalues
Mar 14, 2012
Kasumi Hanazuki
Mar 14, 2012
Kasumi Hanazuki
Mar 14, 2012
Kasumi Hanazuki
March 14, 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@puremagic.com
        ReportedBy: k.hanazuki@gmail.com


--- Comment #0 from Kasumi Hanazuki <k.hanazuki@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: -------
March 14, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7706



--- Comment #1 from Kasumi Hanazuki <k.hanazuki@gmail.com> 2012-03-13 21:21:44 PDT ---
Forgot to mention there is the same problem with opEquals and ==/!=.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 14, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7706



--- Comment #2 from Kasumi Hanazuki <k.hanazuki@gmail.com> 2012-03-13 23:29:50 PDT ---
ah, my idea improves nothing than allowing rvalue-to-const-ref conversion. forget about it.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------