我发现规范的tr.func.require部分要求{C} 11中的std::function
可以复制构造,我已经看到了很多解释为什么这意味着函子用于构造std::function
必须是可复制的,但为什么C ++ 11标准首先使std::function
可复制,而不是使其成为仅移动类型?
答案 0 :(得分:2)
std::function
在C ++ 11之前实现,当时move-semantics尚未可用(它来自boost::function
并且是TR1的一部分)。
我的猜测是在移动语义之前指定了std::function
(并且可能被投入标准)。鉴于此,没有时间审查标准的其余部分。另请参阅this answer关于why shared_ptr deleters have to be CopyConstructible。
另外,出于兼容性原因,突然发生make std::function
移动构造并删除其复制构造函数听起来不合理。