为什么我不能移动包含移动未来的可变函数?

时间:2015-04-24 12:21:53

标签: c++ lambda mutable move-constructor

我基本上都在尝试这样做:

{{1}}

MinGW告诉我,删除了function_which_should_be_movable的Move-Constructor,因为删除了std :: future的Copy-constructor。但是,我不明白为什么编译器会尝试复制未来而不是移动它。

1 个答案:

答案 0 :(得分:4)

function_which_should_be_movable的类型为std::function。根据{{​​3}}:

  

template< class F > function( F f ); F必须符合要求   CallableCopyConstructible

您尝试用于构造std::function对象的lambda表达式是不可复制的,因此存在问题。

至于为什么std::function有这个要求,请看这个问题:cppreference(我自己要求)。简而言之,std::function使用的类型擦除技术将实例化F的复制构造函数。无论您是std::function对象的用户是否实际使用过此复制构造函数,都会发生这种情况。