if the argument is an rvalue, we should swap - it's cheaper