首先处理赋值表达式的哪一侧?

Mar*_*cký 14 c++ exception-handling stdmap

考虑以下代码:

std::unordered_map<int, std::string> data;
data[5] = foo();
Run Code Online (Sandbox Code Playgroud)

按照什么顺序data[5]foo()处理?如果foo()抛出异常,是否创建了5项目data

如果行为取决于C++的版本,那些版本有何不同?