La mayoría de las veces que veo std::movepublicado aquí, hace referencia a la <utility>versión.
El std::moveen<algorithm> realidad hace lo que su nombre sugiere, movimiento , mientras que el std::moveen<utility> proyecta su argumento a una xValue, que es básicamente un paso de preprocesamiento para finalmente mover el xValue en un valor-I. Entonces, ¿no es un poco confuso que ambos sean nombrados movecuando la funcionalidad de cada uno es diferente?
movedebería haber sido llamado make_rvalueo algo por el estilo. Es frustrante explicar una y otra vez que el parámetro único en std::moverealidad no mueve nada.
<algorithm>está dentro es simplemente el que está <utility>aplicado a un rango completo.
<algorithm>realmente realiza el movimiento (suponiendo que hay un operador de asignación de movimiento definido para el tipo que estamos moviendo).
std::moveun operador en lugar de una función de biblioteca. Cualquier nombre mejor que std::movehubiera sido más largo, lo que apesta.