http://d.puremagic.com/issues/show_bug.cgi?id=1861
Yao Gomez <yao.go...@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |yao.go...@gmail.com Version|1.027 |D1 Summary|.sort fails if opCmp takes |(D1 only) .sort fails if |a ref param |opCmp takes a ref param --- Comment #4 from Yao Gomez <yao.go...@gmail.com> 2012-02-05 01:01:46 PST --- Marking this as D1 only, as the built-in, AA.sort method is going to be deprecated. With a slight modification, your test example passes and prints the correct result with the std.algorithm.sort function (D2 only). ------ module opcmpref; import std.stdio, std.algorithm; struct Pair { int a, b; // Sort by b first then a // Sorting fails if rhs is a 'ref' param. Ok if ref removed. int opCmp(ref Pair rhs) { if (b!=rhs.b) return b-rhs.b; return a-rhs.a; } @property string toString() { return std.string.format("(%s,%s)",a,b); } } void main() { // Single comparisons are all fine assert( !(Pair(0,0)<Pair(0,0)) ); assert( !(Pair(1,0)<Pair(0,0)) ); assert( !(Pair(0,1)<Pair(0,0)) ); assert( !(Pair(1,1)<Pair(0,0)) ); assert( (Pair(0,0)<Pair(1,0)) ); assert( !(Pair(1,0)<Pair(1,0)) ); assert( !(Pair(0,1)<Pair(1,0)) ); assert( !(Pair(1,1)<Pair(1,0)) ); assert( (Pair(0,0)<Pair(0,1)) ); assert( (Pair(1,0)<Pair(0,1)) ); assert( !(Pair(0,1)<Pair(0,1)) ); assert( !(Pair(1,1)<Pair(0,1)) ); assert( (Pair(0,0)<Pair(1,1)) ); assert( (Pair(1,0)<Pair(1,1)) ); assert( (Pair(0,1)<Pair(1,1)) ); assert( !(Pair(1,1)<Pair(1,1)) ); auto p = [Pair(0,0), Pair(3,0), Pair(2,1), Pair(1,4)]; std.algorithm.sort(p); // prints 'p=[(0,0), (3,0), (2,1), (1,4)]' writefln("p=%s",p); assert(p[0] == Pair(0,0)); assert(p[1] == Pair(3,0)); assert(p[2] == Pair(2,1)); assert(p[3] == Pair(1,4)); } ------ -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------