rvalues的std :: fill_n,是否只支持按副本填写?

时间:2015-10-08 17:21:49

标签: c++

给出std::vector std::futures

std::vector<std::future<void>> futures;

当我传递一个右值时,std::fill_n怎么抱怨我调用了复制构造函数:

std::fill_n(std::back_inserter(futures), 10, std::async([]{ std::cout << "yo\n"; }));

error: use of deleted function future(const future&)

我的意思是,fill_n没有获得xvalue?如果没有,为什么不呢?

1 个答案:

答案 0 :(得分:5)

std::fill_n使得给定对象的副本作为第三个参数传递,但第三个参数是一个不可复制的未来对象,因为复制未来没有意义。因此错误。

看来你需要这个:

std::generate_n(std::back_inserter(futures), 
                10, 
               []{  return std::async([]{ std::cout << "yo\n"; }); });