I don’t know what the real difference is? When look at the bit presentation, they are exactally the same (because lifetime and type of pointer are not part of it). So it looks just as the same as a Copy - you just memcpy it to the stack, without assuming anything.
In sementical, there is also no real difference. The restriction is that once you have a mutable reference to a value, you lost access to the value until you drop the reference. But then this is what I called Revive.
I know, I know. But then tell me a way to define consume_revive_when_possible, this is what I want to do in my own crate but not able to.
This is not new to Rust anyways. The trait Copy I mentioned before and many things in std::ops(Deref, DerefMut…), Sized (I am not 100% sure) are examples of this. They all have effect on the call site.
So I am looking for compiler support.
Now I think it is time to show my real motivation. I am working on a crate namable_closures. I have defined 5 different types there, and then I figured out one of them is redundent, but a very similar one is not. So I figured this inconsistency out. If your idea can help me addrss this issue, I appreciate your help. More details are in this post.
Again, the most important thing is not revive_only, it is consume_revive_when_possible. This is what I need to do in my crate.