What I'm trying to say is: how does the conversion happen "inside" data structures? e.g.

```rust
let t = (vec![1], &1);
t == (vec![2], 1)
```

Does this create a new copy of `t` with value `(vec![1], 1)`? Or does it just magically make `Eq` work properly when comparing references? What about general traits and functions? Would `fn foo<T>(x: T, y: T)` called like `foo(t, (vec![2], 2))` somehow convert the `t` to the appropriate form above?

And, what about something like `vec![&1]`? Does that get reallocated (storing the dereferences) when needing to be used as a `Vec<int>`?

And lastly, what about non-`Copy` types, like `(&vec![1], 1)` used with `(vec![2], 2)`?