1 use pin_project::{pin_project, pinned_drop}; 2 use std::pin::Pin; 3 4 // In `Drop` impl, the implementor must specify the same requirement as type definition. 5 6 struct DropImpl<T> { 7 f: T, 8 } 9 10 impl<T: Unpin> Drop for DropImpl<T> { 11 //~^ ERROR E0367 drop(&mut self)12 fn drop(&mut self) {} 13 } 14 15 #[pin_project(PinnedDrop)] //~ ERROR E0277 16 struct PinnedDropImpl<T> { 17 #[pin] 18 f: T, 19 } 20 21 #[pinned_drop] 22 impl<T: Unpin> PinnedDrop for PinnedDropImpl<T> { drop(self: Pin<&mut Self>)23 fn drop(self: Pin<&mut Self>) {} 24 } 25 main()26fn main() {} 27