std :: map <> :: inserte utilizando objetos no copiables y una inicialización uniforme

Echa un vistazo al siguiente código:

#include <utility>
#include <map>

// non-copyable but movable
struct non_copyable {
    non_copyable() = default;

    non_copyable(non_copyable&&) = default;
    non_copyable& operator=(non_copyable&&) = default;

    // you shall not copy
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};

int main() {
    std::map<int, non_copyable> map;
    //map.insert({ 1, non_copyable() });  < FAILS
    map.insert(std::make_pair(1, non_copyable()));
    // ^ same and works
}

La compilación de este fragmento de código falla al descomentar la línea marcada en g ++ 4.7. El error producido indica quenon_copyable no se puede copiar, pero esperaba que se moviera.

¿Por qué insertar unstd::pair construido utilizando una inicialización uniforme falla pero no uno construido usandostd::make_pair? ¿No se supone que ambos producen valores que pueden moverse con éxito en el mapa?

Respuestas a la pregunta(2)

Su respuesta a la pregunta