When describing iterator invalidation, the C++ standard takes the simplifying assumption that iterators refer to elements, and a valid iterator value always refers to same element. Invalidating references, pointers or iterators to an element all follow the same rules. (The exception is the end iterator).
Clearly references or pointers to the erased element are invalidated by a call to erase, thus under the standard's simple rules so are all iterators. It could have described what new element must be moved in place abd substituted what iterators refer to, but the writers of the standard chise not to go there. They instead simply dictated the iterator was invalid.
Because it is invalid, dereferencing it or doing anything but destroying it or assigning anitger iterator to it is declared undefined behaviour.
In theory this permits a myriad of optimization opportunities, but I am unaware of any compiler that exploits them. At best compilers add debug checks at this time.
So dereferencing it "works", but being UB the result is inheritly fragile. Future compilers could assume you do not do this and cause arbitrary side effects, including time travel (I am not joking; current compilers can cause UB to time travel and corrupt program state before the UB occurs; in particular, int overflow optimizations).
Every current compiler uses at best thinly wrapped pointers for vector iterators. But relying on non-standard mandated behaviour quirks of the implementation is a bad plan, when doing it correctly only requires a bit more work. If you find a case where assuming that behaviour would be highly useful, I encourage you to write a proposal to define that behaviour using your use case as motivation.