I mean, yes, lifetime elision adds a lifetime to the signature. I don’t see why you need a GAT for for IndexMove.
Mind, I totally misread the OP, and IndexMove is the Wrong Thing. The thing that worries me about an Index-like trait that spits out copies is that
xs.index(n) right now, and in the situation in which you have e.g.
IndexCopy, it is not clear if
&xs[n] is a reference into xs or a reference to the immediate
xs[n]. In this case,
&xs[n] is absurd (since, notionally, it’s a reference into
Cell), but it sounds to me like OP doesn’t want users to know about the
Phrased differently: I don’t think a type should have
Vec<impl Copy>, which simply copies out of the returned pointer) but not have
&xs[n] (i.e., a notional pointer into
xs[n] can be copied out of).