1 use std::{marker::PhantomPinned, pin::Pin}; 2 3 use auxiliary_macro::remove_attr; 4 use pin_project::pin_project; 5 is_unpin<T: Unpin>()6fn is_unpin<T: Unpin>() {} 7 8 #[pin_project] 9 #[remove_attr(field_all)] 10 struct A { 11 #[pin] 12 f: PhantomPinned, 13 } 14 15 #[remove_attr(field_all)] 16 #[pin_project] 17 struct B { 18 #[pin] 19 f: PhantomPinned, 20 } 21 main()22fn main() { 23 is_unpin::<A>(); 24 is_unpin::<B>(); 25 26 let mut x = A { f: PhantomPinned }; 27 let x = Pin::new(&mut x).project(); 28 let _: Pin<&mut PhantomPinned> = x.f; //~ ERROR E0308 29 30 let mut x = B { f: PhantomPinned }; 31 let x = Pin::new(&mut x).project(); 32 let _: Pin<&mut PhantomPinned> = x.f; //~ ERROR E0308 33 } 34