Entonces, ¿unique_ptr se puede usar de forma segura en colecciones stl?

Estoy confundido con la filosofía de movimiento unique_ptr y rvalue.

Digamos que tenemos dos colecciones:

std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;

Ahora esperaría que lo siguiente fallara, ya que no se sabe qué hace el algoritmo internamente y tal vez haciendo copias dinámicas internas y similares, eliminando así la propiedad del auto_ptr:

std::sort(autoCollection.begin(), autoCollection.end());

Entiendo esto. Y el compilador correctamente no permite que esto suceda.

Pero luego hago esto:

std::sort(uniqueCollection.begin(), uniqueCollection.end());

Y esto compila. Y no entiendo por qué. No pensé que se pudieran copiar unique_ptrs. ¿Esto significa que no se puede tomar un valor de pivote, por lo que el tipo es menos eficiente? ¿O es este pivote en realidad un movimiento, que de hecho es tan peligroso como la colección de auto_ptrs, y el compilador no debe permitirlo?

Creo que me falta información crucial, ¡así que espero ansiosamente que alguien me proporcione el ajá! momento.

Respuestas a la pregunta(3)

Su respuesta a la pregunta