https://issues.dlang.org/show_bug.cgi?id=21205
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: nob...@puremagic.com Reporter: simen.kja...@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 --