Na maioria das vezes que vejo std::moveaqui, está fazendo referência à <utility>versão.
O std::movein<algorithm> realmente faz o que o nome sugere, move , enquanto o std::movein<utility> lança seu argumento para um xvalue, que é basicamente apenas uma etapa de pré-processamento para, eventualmente, mover o xvalue para um lvalue. Portanto, não é meio confuso que esses dois sejam nomeados movequando a funcionalidade de cada um é diferente?
movedeveria ter sido chamado make_rvalueou algo assim. É frustrante explicar repetidamente que o único parâmetro std::movenão move nada.
<algorithm>é simplesmente aquele <utility>aplicado a toda uma gama.
<algorithm>realmente executa a movimentação (supondo que exista um operador de atribuição de movimentação definido para o tipo que estamos movendo).
std::moveum operador em vez de uma função de biblioteca. Qualquer nome melhor do que std::moveteria sido mais longo, o que é péssimo.