Explicit and unequivocal NO. Standard doesn’t have this guarantee, and this is why try_emplace exists.
See notes:
Unlike insert or emplace, these functions do not move from rvalue
arguments if the insertion does not happen, which makes it easy to
manipulate maps whose values are move-only types, such as
std::map<std::string, std::unique_ptr<foo>>
. In addition,try_emplace
treats the key and the arguments to the mapped_type separately, unlike
emplace
, which requires the arguments to construct avalue_type
(that
is, astd::pair
)