Problema con los "tipos solo móviles" en VC ++ 2010

Recientemente instalé Visual Studio 2010 Professional RC para probarlo y probar las pocas características de C ++ 0x que se implementan en VC ++ 2010.

He instanciado unstd::vector destd::unique_ptr, sin ningún problema. Sin embargo, cuando trato de rellenarlo pasando temporarios apush_back, el compilador se queja de que el constructor de copia deunique_ptr es privado. Intenté insertar un valor l moviéndolo, y funciona bien.

#include <utility>
#include <vector>

int main()
{
    typedef std::unique_ptr<int> int_ptr;

    int_ptr pi(new int(1));

    std::vector<int_ptr> vec;

    vec.push_back(std::move(pi));      // OK
    vec.push_back(int_ptr(new int(2))); // compiler error
}

Como resultado, el problema no esunique_ptr nivector::push_back pero la forma en que VC ++ resuelve las sobrecargas cuando se trata de valores, como lo demuestra el siguiente código:

struct MoveOnly
{
    MoveOnly() {}
    MoveOnly(MoveOnly && other) {}

private:

    MoveOnly(const MoveOnly & other);
};

void acceptRValue(MoveOnly && mo) {}

int main()
{
    acceptRValue(MoveOnly()); // Compiler error
}

El compilador se queja de que el constructor de copia no es accesible. Si lo hago público, el programa se compila (aunque el constructor de la copia no esté definido).

¿Entendí mal algo acerca de las referencias de rvalue, o es un error (posiblemente conocido) en la implementación de VC ++ 2010 de esta característica?

Respuestas a la pregunta(3)

Su respuesta a la pregunta