Portanto, unique_ptr pode ser usado com segurança nas coleções stl?
Estou confuso com a filosofia unique_ptr e rvalue move.
Digamos que temos duas coleções:
std::vector<std::auto_ptr<int>> autoCollection;
std::vector<std::unique_ptr<int>> uniqueCollection;
Agora, eu esperaria que o seguinte falhe, pois não há como dizer o que o algoritmo está fazendo internamente e talvez fazer cópias dinâmicas internas e similares, arrancando assim a propriedade do auto_ptr:
std::sort(autoCollection.begin(), autoCollection.end());
Eu entendi isso. E o compilador corretamente não permite que isso aconteça.
Mas então eu faço isso:
std::sort(uniqueCollection.begin(), uniqueCollection.end());
E isso compila. E eu não entendo o porquê. Eu não achei que unique_ptrs pudesse ser copiado. Isso significa que um valor de pivô não pode ser obtido, portanto a classificação é menos eficiente? Ou esse pivô é realmente uma jogada, que na verdade é tão perigosa quanto a coleção de auto_ptrs e deve ser proibida pelo compilador?
Acho que estou perdendo alguma informação crucial, então espero ansiosamente alguém que me forneça o aha! momento.