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>()6 fn 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()22 fn 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