Skip to content

Commit

Permalink
Merge pull request #1048 from Poita/bug8368
Browse files Browse the repository at this point in the history
Issue 8368 - Insufficient constraints for sort
  • Loading branch information
alexrp committed Jan 14, 2013
2 parents bdc9599 + b89adc0 commit 2973b7e
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions std/algorithm.d
Original file line number Diff line number Diff line change
Expand Up @@ -8008,6 +8008,17 @@ assert(words == [ "a", "aBc", "abc", "ABC", "b", "c" ]);
SortedRange!(Range, less)
sort(alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable,
Range)(Range r)
if (((ss == SwapStrategy.unstable && (hasSwappableElements!Range ||
hasAssignableElements!Range)) ||
(ss != SwapStrategy.unstable && hasAssignableElements!Range)) &&
isRandomAccessRange!Range &&
hasSlicing!Range &&
hasLength!Range)
/+ Unstable sorting uses the quicksort algorithm, which uses swapAt,
which either uses swap(...), requiring swappable elements, or just
swaps using assignment.
Stable sorting uses TimSort, which needs to copy elements into a buffer,
requiring assignable elements. +/
{
alias binaryFun!(less) lessFun;
alias typeof(lessFun(r.front, r.front)) LessRet; // instantiate lessFun
Expand Down

0 comments on commit 2973b7e

Please sign in to comment.