459 {
460
461 if (first == middle || middle == last) {
462 return;
463 }
464
465
466 auto left_size = middle - first;
467 auto right_size = last - middle;
468 if (left_size + right_size <= 32) {
469
470 Iterator left = first;
471 Iterator right = middle;
472
473 while (left < middle && right < last) {
474 if (!comp(*right, *left)) {
475
476 ++left;
477 } else {
478
480 Iterator shift_end = right;
481 Iterator shift_start = left;
482
483
484 while (shift_end > shift_start) {
485 *shift_end =
fl::move(*(shift_end - 1));
486 --shift_end;
487 }
488
490 ++left;
491 ++middle;
492 ++right;
493 }
494 }
495 return;
496 }
497
498
499 if (left_size == 0 || right_size == 0) {
500 return;
501 }
502
503 if (left_size == 1) {
504
507 return;
508 }
509
510 if (right_size == 1) {
511
514 return;
515 }
516
517
518 Iterator left_mid = first + left_size / 2;
520
521
523
524
525 Iterator new_middle = left_mid + (right_mid - middle);
526
527
530}
void rotate_impl(Iterator first, Iterator middle, Iterator last) FL_NOEXCEPT
void merge_inplace(Iterator first, Iterator middle, Iterator last, Compare comp) FL_NOEXCEPT
Iterator lower_bound_impl(Iterator first, Iterator last, const T &value, Compare comp) FL_NOEXCEPT
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
constexpr int type_rank< T >::value