This provides the same behaviour as the assign operator, but with certain checks removed as they do not apply when the source tmp is an rvalue and will therefore not be retained after the assignment operation. It is also consistent with and complimentary to the behaviour of the move constructor.