| use std::marker::PhantomPinned; |
| use std::pin::Pin; |
| |
| trait MyUnpinTrait { |
| fn into_pinned_type(self: Pin<&mut Self>) -> Pin<&mut PhantomPinned>; |
| } |
| impl MyUnpinTrait for PhantomPinned { |
| fn into_pinned_type(self: Pin<&mut Self>) -> Pin<&mut PhantomPinned> { |
| self |
| } |
| } |
| impl Unpin for dyn MyUnpinTrait {} //~ ERROR E0321 |
| |
| // It would be unsound for this function to compile. |
| fn pin_it(not_yet_pinned: &mut PhantomPinned) -> Pin<&mut PhantomPinned> { |
| Pin::new(not_yet_pinned as &mut dyn MyUnpinTrait).into_pinned_type() |
| } |
| |
| fn main() {} |