1 // https://discord.com/channels/273534239310479360/512792629516173323/870075511009857617 2 3 #![allow(hidden_glob_reexports)] 4 5 extern crate pin_project as pin_project_orig; 6 extern crate self as pin_project; 7 8 pub use ::pin_project_orig::*; 9 mod __private { 10 pub use ::pin_project_orig::__private::*; 11 pub trait Drop {} 12 } 13 14 use std::{marker::PhantomPinned, mem}; 15 16 #[pin_project] //~ ERROR conflicting implementations of trait `_::FooMustNotImplDrop` 17 struct S { 18 #[pin] 19 f: (u8, PhantomPinned), 20 } 21 22 impl Drop for S { drop(&mut self)23 fn drop(&mut self) { 24 let prev = &self.f.0 as *const _ as usize; 25 let moved = mem::take(&mut self.f); // move pinned field 26 let moved = &moved.0 as *const _ as usize; 27 assert_eq!(prev, moved); // panic 28 } 29 } 30 main()31fn main() { 32 let mut x = Box::pin(S { f: (1, PhantomPinned) }); 33 let _f = x.as_mut().project().f; // first mutable access 34 } 35