Показалось мну логичным, вот так в 4 строчки стартовать/стопать тредпул:
auto tasks = make_shared<Queue>();
std::vector<std::thread> pool(4);
std::fill(pool.begin(), pool.end(), std::thread([=](){tasks->run();}));
std::for_each(pool.begin(), pool.end(), [](thread& thread) {thread.join();});
Но, подлый std::fill кушает константную ссылку заместо rv ссылки. Так только в gcc? Wtf? Я что то не так готовлю?
Или это такой фейспалмненкий облом? Или есть логичное обьяснение почему не ввели перегрузку? Да хрен с ней с перегрузкой, хотя бы контракт, что если возможен move вызывается move. Кто то в курсе комитетовских дел?
Вобщем я возмущён и разочарован:(