std :: vector :: push_back: un objeto que no se puede copiar genera un error de compilación

Recibo errores de compilación eng++ (GCC) 4.7.2 pero no enMSVC-2012 cuando intentostd::vector::push_back un objeto no copiable (constructor de copia privada) pero movible. Para mí, mi ejemplo es idéntico a muchos otros ejemplos en SO y en otros lugares. El mensaje de error hace que parezca un problema porque la estructura no es "constructible directamente". No sé lo que esto significa, por lo que estoy totalmente inseguro de por qué un objeto debe ser "constructible directo" para ser rechazado.

#include <vector>
#include <memory>

struct MyStruct
{

    MyStruct(std::unique_ptr<int> p);
    MyStruct(MyStruct&& other);
    MyStruct&  operator=(MyStruct&& other);

    std::unique_ptr<int> mP;

private:
            // Non-copyable
    MyStruct(const MyStruct&);
    MyStruct& operator=(const MyStruct& other);
};

int main()
{

    MyStruct s(std::unique_ptr<int>(new int(5)));
    std::vector<MyStruct> v;

    auto other = std::move(s);       // Test it is moveable
    v.push_back(std::move(other));   // Fails to compile

    return 0;
}

Da errores

/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/type_traits: In instantiation of ‘struct std::__is_direct_constructible_impl<MyStruct, const MyStruct&>’:
... snip ...
/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../include/c++/4.7.2/bits/stl_vector.h:900:9:   required from ‘void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = MyStruct; _Alloc = std::allocator<MyStruct>; std::vector<_Tp, _Alloc>::value_type = MyStruct]’
main.cpp:27:33:   required from here
main.cpp:16:5: error: ‘MyStruct::MyStruct(const MyStruct&)’ is private

Solución simple a partir de varias respuestas:

UtilizarMyStruct(const MyStruct&) = delete; en lugar deprivate ctor cortarHeredarboost::noncopyable (u otra clase con ctor privado)

Respuestas a la pregunta(1)

Su respuesta a la pregunta