Given two small unsorted arrays 'a1' and 'a2', a common natural idiom to test that they have the same items is: a1.sort() == a2.sort() But currently in D2 it's a trap: import std.algorithm: sort; void main() { auto a1 = [1, 2]; auto a2 = [2, 1]; assert(a1.sort() == a2.sort()); // AssertError assert(a1.sort().release() == a2.sort().release()); // OK } To avoid such bugs I suggest to statically forbid the == operation among two SortedRange; or _better_ to implement it correctly, and allow that testing idiom.
Another workaround: import std.algorithm: sort, equal; void main() { auto a1 = [1, 2]; auto a2 = [2, 1]; assert(equal(a1.sort(), a2.sort())); // OK }
This appears to have been fixed in 2.063 http://dlang.org/changelog.html#structuralcompare
Changed to WORKSFORME so that it doesn't appear in the changelog for next update.