It is well defined because it doesn't matter what comes first in this code: you can rewrite it to the next equivalent
hash_map[object.key()] = static_cast<objecttype&&>(object);
What can we say about the code:
object.key() must be executed before being assigned to the mapstd::move(object) must be executed before being assigned to the map
Then a mapping will be assigned that will accept an xvalued object with any key changes.
source share