(1) There is also an implementation of BinaryHeap in Phobos, perhaps this could share the code with it.
(2) To rely on assignment is a regression. The assignment could be disabled for the sorted entities, leaving only swap. Granted, sifting via swaps will be slower than sifting via assignments for simple (plain old data) types. But for complex structs, the result might be the opposite, and for non-copyable structs, this implementation simply will not work, while the previous one does.