std :: map <> :: вставка с использованием не копируемых объектов и равномерной инициализации

Посмотрите на следующий код:

#include 
#include 

// 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 map;
    //map.insert({ 1, non_copyable() });  < FAILS
    map.insert(std::make_pair(1, non_copyable()));
    // ^ same and works
}

Компиляция этого фрагмента завершается неудачно при раскомментировании отмеченной строки в g ++ 4.7. Произошедшая ошибка указывает на то, чтоnon_copyable Можно'не будет скопировано, но я ожидал, что оно будет перемещено.

Почему вставкаstd::pair построено с использованием единой ошибки инициализации, но не с использованиемstd::make_pair? Арен»Должны ли оба производить значения, которые могут быть успешно перемещены в карту?

Ответы на вопрос(2)

Ваш ответ на вопрос