www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21205] New: Struct comparison does not follow spec


          Issue ID: 21205
           Summary: Struct comparison does not follow spec
           Product: D
           Version: D2
          Hardware: All
                OS: Windows
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: simen.kjaras gmail.com

From https://dlang.org/spec/operatoroverloading.html#equals:
2. [T]he expressions a.opEquals(b) and b.opEquals(a) are tried. If both resolve to the same opEquals function, then the expression is rewritten to be a.opEquals(b). 3. If one is a better match than the other, or one compiles and the other does not, the first is selected. 4. Otherwise, an error results. Clearly, this is not the case: struct S1 { bool opEquals(S2 a) { return true; } } struct S2 { bool opEquals(S1 a) { return false; } } static assert((S1.init == S2.init) == (S2.init == S1.init)); // Fails --
Aug 28 2020