Consider this code:
std::unordered_map<int, std::string> data;
data[5] = foo();
In what order are data[5] and foo() processed? If foo() throws an exception, is the 5 item in data created or not?
If the behaviour depends on version of C++, how do those versions differ?