I have some (C++14) code that looks like this:
map> junk;
for (int id : GenerateIds()) {
try {
set stuff =
Before C++17 there was no sequencing between the left- and right-hand side of assignment operators.
It's first in C++17 that explicit sequencing was introduced (right-hand side is evaluated first).
That means the evaluation order is unspecified, which means it's up to the implementation to perform the evaluation in the order in which it wants, and in this case it evaluates the left-hand side first.
See this evaluation order reference for more details (especially point 20).