Bug 16338 – sort variantArray bug

Status
RESOLVED
Resolution
WORKSFORME
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2016-07-30T08:38:43Z
Last change time
2023-05-30T15:18:29Z
Assigned to
No Owner
Creator
Danila Letunovskiy

Comments

Comment #0 by kapblc — 2016-07-30T08:38:43Z
import std.stdio; import std.variant; import std.algorithm; void main(){ struct Trava { long a, b, c; } Trava n1, n2, n3, n4, n5, n6; n1.a = 1; n2.a = 2; n3.a = 3; n4.a = -1; n5.a = 5; n6.a = 6; auto M = [n1, n2, n3, n4, n5, n6]; writeln("input:", M); M.sort!((a, b) => a.a < b.a); writeln("output:", M); // [n4, n1, n2, n3, n5, n6] ok auto m = variantArray(n1, n2, n3, n4, n5, n6); writeln("input:", m); m.sort!((a, b){ auto A = a.peek!Trava; auto B = b.peek!Trava; return A.a < B.a; }); writeln("output:", m); // [n4, n4, n4, n4, n5, n6] bug struct Trava2 { long a, b; } Trava2 v1, v2, v3, v4, v5, v6; v1.a = 1; v2.a = 2; v3.a = 3; v4.a = -1; v5.a = 5; v6.a = 6; auto w = variantArray(v1, v2, v3, v4, v5, v6); writeln("input:", w); w.sort!((a, b){ auto A = a.peek!Trava2; auto B = b.peek!Trava2; return A.a < B.a; }); writeln("output:", w); // [v4, v1, v2, v3, v5, v6] ok }
Comment #1 by razvan.nitu1305 — 2023-05-30T15:18:29Z
This seems to have been fixed. I cannot reproduce this.