Reputation: 6230
Trying the make simple piece of code work:
std::thread threadFoo;
std::thread&& threadBar = std::thread(threadFunction);
threadFoo = threadBar; // thread& operator=( thread&& other ); expected to be called
Getting an error:
use of deleted function 'std::thread& std::thread::operator=(const std::thread&)'
I explicitly define threadBar
as an rvalue reference, not a ordinary one. Why is not expected operator being called? How do I move one thread to another?
Thank you!
Upvotes: 13
Views: 17113
Reputation: 21
See also std::thread::swap
. This could be implemented as
std::thread threadFoo;
std::thread threadBar = std::thread(threadFunction);
threadBar.swap(threadFoo);
Upvotes: 2
Reputation: 234384
Named references are lvalues. Lvalues don't bind to rvalue references. You need to use std::move
.
threadFoo = std::move(threadBar);
Upvotes: 17