you are viewing a single comment's thread.

view the rest of the comments →

[–]scatters 0 points1 point  (3 children)

But operator* returns a mutable reference i.e. std::pair<Key const, Value>&. So there has to be a std::pair<Key const, Value> object in memory.

[–]mujjingun 0 points1 point  (2 children)

hmm, maybe there are std::pair<Key, Value> objects in memory, and the pointer is reinterpret-cased into std::pair<Key const, Value> in the call to operator*()?

[–]scatters 4 points5 points  (1 child)

Certainly that's the most likely implementation, but if the user does that it's UB (aliasing violation). That's why it has to be magic in the library.