BlockSwap now uses std::swap_ranges