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