Source code
Revision control
Copy as Markdown
Other Tools
use std::{marker::PhantomPinned, pin::Pin};
use auxiliary_macro::remove_attr;
use pin_project::pin_project;
fn is_unpin<T: Unpin>() {}
#[pin_project]
#[remove_attr(struct_all)]
struct A {
#[pin] //~ ERROR cannot find attribute `pin` in this scope
f: PhantomPinned,
}
#[remove_attr(struct_all)]
#[pin_project]
struct B {
#[pin] //~ ERROR cannot find attribute `pin` in this scope
f: PhantomPinned,
}
#[pin_project] //~ ERROR has been removed
#[remove_attr(struct_pin)]
struct C {
f: PhantomPinned,
}
#[remove_attr(struct_pin)]
#[pin_project] // Ok
struct D {
f: PhantomPinned,
}
fn main() {
is_unpin::<A>(); //~ ERROR E0277
is_unpin::<B>(); //~ ERROR E0277
is_unpin::<D>(); // Ok
let mut x = A { f: PhantomPinned };
let _ = Pin::new(&mut x).project(); //~ ERROR E0277,E0599
let mut x = B { f: PhantomPinned };
let _ = Pin::new(&mut x).project(); //~ ERROR E0277,E0599
let mut x = D { f: PhantomPinned };
let _ = Pin::new(&mut x).project(); //~ Ok
}