Ha, you have somehow stumbled on exactly what ate up my yesterday. You totally will not get the same type by reference when nothing changes. You cannot rely on it in almost any case, for reasons I will tell you soon.

The fact that the compiler makes decisions based on the truth of (x.foo eq x) turns out to be at the root of some pretty long-running incorrectness.