There's nothing evil about the  operator. You're just doing undefined behavior.
Just like doing i + --i;... you cannot read and write a variable/object multiple times in the same sequence point.
The  operator (potentially) modifies the size of the map, and size() obviously reads the size of the map. So the result of that read+write order depends on which of those the compiler decides to do first.
This should never be done, and any analysis of the output is meaningless - it's undefined.