std :: map <> :: insert przy użyciu obiektów nie do skopiowania i jednolita inicjalizacja

Spójrz na następujący kod:

#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
}

Kompilacja tego fragmentu kończy się niepowodzeniem podczas odkomentowania zaznaczonej linii na g ++ 4.7. Wywołany błąd wskazuje na tonon_copyable nie można go skopiować, ale spodziewałem się, że zostanie przeniesiony.

Dlaczego wstawianie astd::pair skonstruowane przy użyciu jednolitej inicjalizacji nie powiodło się, ale nie skonstruowane przy użyciustd::make_pair? Czy obydwa mają tworzyć wartości, które można z powodzeniem przenieść na mapę?

questionAnswers(2)

yourAnswerToTheQuestion