Problema com “tipos móveis somente” no VC ++ 2010

Instalei recentemente o Visual Studio 2010 Professional RC para testá-lo e testar os poucos recursos do C ++ 0x implementados no VC ++ 2010.

Instanciei umstd::vector dostd::unique_ptr, sem quaisquer problemas. No entanto, quando tento preenchê-lo, passe temporários parapush_back, o compilador reclama que o construtor de cópias deunique_ptr é privado. Tentei inserir um lvalue movendo-o e funciona muito bem.

#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 se vê, o problema não é nemunique_ptr&nbsp;nemvector::push_back&nbsp;mas a maneira como o VC ++ resolve sobrecargas ao lidar com rvalues, conforme demonstrado pelo seguinte código:

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

private:

    MoveOnly(const MoveOnly & other);
};

void acceptRValue(MoveOnly && mo) {}

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

O compilador reclama que o construtor de cópias não está acessível. Se eu o tornar público, o programa será compilado (mesmo que o construtor de cópias não esteja definido).

Eu entendi mal algo sobre referências a rvalue ou é um bug (possivelmente conhecido) na implementação desse recurso no VC ++ 2010?