【发布时间】:2013-02-01 17:07:05
【问题描述】:
看看下面的代码:
#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
}
在 g++ 4.7 上取消注释标记行时,编译此 sn-p 失败。产生的错误表明non_copyable不能被复制,但我预计它会被移动。
为什么插入使用统一初始化构造的std::pair 失败,但插入使用std::make_pair 构造的却失败?两者都不应该产生可以成功移动到地图中的右值吗?
【问题讨论】:
标签: c++ c++11 noncopyable movable