Does the C++ standard guarantee that a failed insertion into an associative container will not modify the rvalue-reference argument?

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 a value_type (that
is, a std::pair)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)