Move semantics transfer resource ownership rather than copying it. With std::thread, the moved-from object has no associated thread; moving from a temporary is implicit, while moving from a named object requires std::move. section 2.3
void some_function(); void some_other_function(); std::thread t1(some_function); std::thread t2=std::move(t1); t1=std::thread(some_other_function); std::thread t3; t3=std::move(t2); t1=std::move(t3); #1
Follow ownership as it moves among t1, t2, and t3. The final assignment targets a thread-owning t1, so it calls std::terminate(). section 2.3




