void swap(function& other) noexcept;
Effects: interchanges the targets of *this and other.
template<class F, class A> void assign(F&& f, const A& a);
Effects: function(allocator_arg, a, std::forward<F>(f)).swap(*this)