www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 7706] New: Comparing struct rvalues

reply d-bugmail puremagic.com writes:
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



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: -------
Mar 13 2012
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7706




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: -------
Mar 13 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=7706




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: -------
Mar 13 2012