hi in <functional> function& operator=(function&& __x) { function(std::move(__x)).swap(*this); return *this; } why not just __x.swap(*this); ?