Полученная ошибка говорит о том, что строка fill_n
ниже пытается использовать конструктор удаленной копии: почему он не пытается использовать конструктор перемещения?Я попытался обернуть его в std::move
, но это не помогло.
std::vector< std::thread > workers;
workers.reserve( 10 );
std::fill_n( std::back_inserter( workers ), 10, std::thread( []{ std::cout << "thread\n"; } ) );
Однако, если я изменю строку fill_n
на
for( int i = 0; i < 10; ++i )
{
workers.push_back( std::thread( []{ std::cout << "thread\n"; } ) );
}
, это прекрасно работает.Я думал, что это, по сути, то же самое, что я делал изменения от одного к другому в чем-то похожем коде.