C ++ unique_ptr y mapa

Estoy tratando de usar elC ++ 0x unique_ptr clase dentro de unamap al igual que:

// compile with `g++ main.cpp -std=gnu++0x`

#include <string.h>    
#include <map>
#include <memory>

using namespace std;

struct Foo {
    char *str;    
    Foo(char const *str_): str(strdup(str_)) {}
};

int main(void) {
    typedef std::map<int, unique_ptr<Foo>> Bar;
    Bar bar;
    auto a = bar.insert(Bar::value_type(1, new Foo("one")));
    return 0;
}

Sin embargo, GCC me da el siguiente error (acortado, creo que esta es la parte relevante, por favor pruebe en su propio compilador de C ++):

main.cpp:19:   instantiated from here
/usr/include/c++/4.4/bits/unique_ptr.h:214: error: deleted function ‘std::unique_ptr::unique_ptr(const std::unique_ptr&) [with _Tp = Foo, _Tp_Deleter = std::default_delete]’
/usr/include/c++/4.4/bits/stl_pair.h:68: error: used here

Realmente no estoy seguro de lo que he hecho mal, esto funciona en MSVC. He encontrado muysimilar preguntas, que parecen iguales, sin embargo, sus soluciones no funcionan para mí.

matt@stanley:/media/data/src/c++0x-test$ gcc --version
gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3

Respuestas a la pregunta(4)

Su respuesta a la pregunta