cartesianProduct: default order should be lexicographically sorted.

This commit is contained in:
H. S. Teoh 2013-05-27 19:51:37 -07:00
parent 8221ed4c4b
commit a8f80e04f2

View file

@ -12764,16 +12764,16 @@ auto cartesianProduct(R1, R2)(R1 range1, R2 range2)
else static assert(0, "cartesianProduct of infinite ranges requires "~
"forward ranges");
}
else static if (isInputRange!R2 && isForwardRange!R1 && !isInfinite!R1)
{
return joiner(map!((ElementType!R2 a) => zip(range1.save, repeat(a)))
(range2));
}
else static if (isInputRange!R1 && isForwardRange!R2 && !isInfinite!R2)
{
return joiner(map!((ElementType!R1 a) => zip(repeat(a), range2.save))
(range1));
}
else static if (isInputRange!R2 && isForwardRange!R1 && !isInfinite!R1)
{
return joiner(map!((ElementType!R2 a) => zip(range1.save, repeat(a)))
(range2));
}
else static assert(0, "cartesianProduct involving finite ranges must "~
"have at least one finite forward range");
}