Well, we do have drop flags already, and this is basically an extension of them. They're usually hidden from the user tho. Mainly you just don't want double-drop on panic. The main risk is when moving things out - if you simply reverted the type, then it'd potentially cause double-drop; so you can't revert the type.
In practice the deref_move should avoid panicking and the closure should be compiler-generated in such a way that it never panics. Optionally DerefMove could be unsafe to implement and impossible to call manually.
If it helps, tho: you can't pass one of these
&mut T->U across a catch_unwind. They're not references - they're part of the function signature. So either you move the whole thing into the
catch_unwind or you can't do
&mut T->U on it. We believe this restriction applies today with