
It should what the standard says. If it says anything can happen, then anything can happen. Including crashing. It is perfectly possible for a CPU to trap on uninitialized variables for example.
int* i; assert(i == i);
Alas, back to the standard. I find the standard's limitations unfortunate; equality comparison of uninitialized values should be allowed. I doubt that allowing that such comparisons would have any significant impact on real programs. More importantly, it lets you draw a direct relationship between an iterator with a singular value (say, i) and an empty range [i, i). The reason why dereferencing a singular iterator is invalid is that you are dereferencing past the end. It's also the same reason why ++ is invalid; you're past the end.