Good questions!

> how does the conversion happen "inside" data structures?

I believe we can make that work, but I'd be fine with not doing auto-deref inside data-structures.

> Or does it just magically make Eq work properly when comparing references? 

Yes, for references and types that implement `Deref`.

> Would fn foo<T>(x: T, y: T) called like foo(t, (vec![2], 2)) somehow convert the t to the appropriate form above?

No.

> And, what about something like vec![&1]? Does that get reallocated (storing the dereferences) when needing to be used as a Vec<int>?

No. I think you're looking at it as "the whole structure needs to change to conform as if it contained a value instead of a reference". That's not how I see it.

> And lastly, what about non-Copy types, like (&vec![1], 1) used with (vec![2], 2)?

Again, the structure itself isn't converted. Code that compares those two tuples certainly compares element-by-element, and when a `&T` is to be compared to a `T`, it's implicitly converted (as a deref) to a `T`.

But like I said, I'd be fine with not handling references inside structures, just the "top-level" type.