我基本上都在尝试这样做:
{{1}}
MinGW告诉我,删除了function_which_should_be_movable的Move-Constructor,因为删除了std :: future的Copy-constructor。但是,我不明白为什么编译器会尝试复制未来而不是移动它。
答案 0 :(得分:4)
function_which_should_be_movable
的类型为std::function
。根据{{3}}:
template< class F > function( F f );
F
必须符合要求Callable
和CopyConstructible
。
您尝试用于构造std::function
对象的lambda表达式是不可复制的,因此存在问题。
至于为什么std::function
有这个要求,请看这个问题:cppreference(我自己要求)。简而言之,std::function
使用的类型擦除技术将实例化F
的复制构造函数。无论您是std::function
对象的用户是否实际使用过此复制构造函数,都会发生这种情况。