Я видел несколько мест в Интернете, где описывается использование std::copy_if с std::make_move_iterator, но если бы итератор был прямым итератором, это привело бы к появлению действительных, но неопределенных (VBU) объектов, разбросанных по исходному контейнеру.
Не лучше ли было бы иметь алгоритм std::move_if, такой, что если объект перемещается, то результирующий объект VBU переместится в конец диапазона, как это делается в алгоритме std::remove_if, объединяя все объекты VBU вместе, чтобы их можно было удалить или переназначить?
Подробнее здесь: https://stackoverflow.com/questions/555 ... -algorithm