为何C++标准库std::function提前检查目标可拷贝构造而非仅在拷贝时报错?
关于std::function强制要求目标可拷贝构造的疑问
有资料解释过std::function要求目标函数对象必须具备有效拷贝构造函数的原因,但实际使用中发现一个矛盾:通常编译器不会因为未被调用的构造函数缺失而报错——比如一个类删除了拷贝构造函数,只要代码里只做移动操作就没问题。
但当我创建一个捕获了这类不可拷贝对象的std::function,并且只对这个std::function执行移动操作时,却编译失败,报错如下:
static_assert failed: 'The target function object type must be copy constructible (N4988 [func.wrap.func.con]/10.1).'
这说明哪怕实际不会执行拷贝构造,std::function也会提前检查目标是否可拷贝。为什么不能把这个static_assert放在std::function的拷贝构造函数里,只在实际尝试拷贝的时候才报错?当前这种设计的灵活性实在太差了。
内容的提问来源于stack exchange,提问作者Zebrafish
相关产品推荐
相关产品推荐

