464 {
465
466 if (first == middle || middle == last) {
467 return;
468 }
469
470
471 auto left_size = middle - first;
472 auto right_size = last - middle;
473 if (left_size + right_size <= 32) {
474
475 Iterator left = first;
476 Iterator right = middle;
477
478 while (left < middle && right < last) {
479 if (!comp(*right, *left)) {
480
481 ++left;
482 } else {
483
485 Iterator shift_end = right;
486 Iterator shift_start = left;
487
488
489 while (shift_end > shift_start) {
490 *shift_end =
fl::move(*(shift_end - 1));
491 --shift_end;
492 }
493
495 ++left;
496 ++middle;
497 ++right;
498 }
499 }
500 return;
501 }
502
503
504 if (left_size == 0 || right_size == 0) {
505 return;
506 }
507
508 if (left_size == 1) {
509
512 return;
513 }
514
515 if (right_size == 1) {
516
519 return;
520 }
521
522
523 Iterator left_mid = first + left_size / 2;
525
526
528
529
530 Iterator new_middle = left_mid + (right_mid - middle);
531
532
535}
void rotate_impl(Iterator first, Iterator middle, Iterator last) FL_NO_EXCEPT
Iterator lower_bound_impl(Iterator first, Iterator last, const T &value, Compare comp) FL_NO_EXCEPT
void merge_inplace(Iterator first, Iterator middle, Iterator last, Compare comp) FL_NO_EXCEPT
constexpr remove_reference< T >::type && move(T &&t) FL_NO_EXCEPT
constexpr int type_rank< T >::value