Bug 7706 – Comparing struct rvalues

Status
NEW
Severity
enhancement
Priority
P4
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-03-13T21:17:28Z
Last change time
2024-12-13T17:59:12Z
Keywords
spec
Assigned to
No Owner
Creator
Kasumi Hanazuki
Moved to GitHub: dmd#18427 →

Comments

Comment #0 by k.hanazuki — 2012-03-13T21:17:28Z
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
Comment #1 by k.hanazuki — 2012-03-13T21:21:44Z
Forgot to mention there is the same problem with opEquals and ==/!=.
Comment #2 by k.hanazuki — 2012-03-13T23:29:50Z
ah, my idea improves nothing than allowing rvalue-to-const-ref conversion. forget about it.
Comment #3 by robert.schadek — 2024-12-13T17:59:12Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18427 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB