#! [warn(rust_2018_idioms, single_use_lifetimes)]
#! [allow(dead_code)]
#[ macro_use]
mod auxiliary;
pub mod default {
use std::marker::PhantomPinned;
use pin_project::pin_project;
struct Inner<T> {
f: T,
}
assert_unpin!(Inner<()>);
assert_not_unpin!(Inner<PhantomPinned>);
#[ pin_project]
struct Struct <T, U> {
#[ pin]
f1: Inner<T>,
f2: U,
}
assert_unpin!(Struct <(), ()>);
assert_unpin!(Struct <(), PhantomPinned>);
assert_not_unpin!(Struct <PhantomPinned, ()>);
assert_not_unpin!(Struct <PhantomPinned, PhantomPinned>);
#[ pin_project(project = EnumProj, project_ref = EnumProjRef)]
enum Enum <T, U> {
V1 {
#[ pin]
f1: Inner<T>,
f2: U,
},
}
assert_unpin!(Enum <(), ()>);
assert_unpin!(Enum <(), PhantomPinned>);
assert_not_unpin!(Enum <PhantomPinned, ()>);
assert_not_unpin!(Enum <PhantomPinned, PhantomPinned>);
#[ pin_project]
struct TrivialBounds {
#[ pin]
f: PhantomPinned,
}
assert_not_unpin!(TrivialBounds);
#[ pin_project]
struct PinRef<'a, T, U> {
#[ pin]
f1: &'a mut Inner<T>,
f2: U,
}
assert_unpin!(PinRef<'_, PhantomPinned, PhantomPinned>);
}
pub mod cfg {
use std::marker::PhantomPinned;
use pin_project::pin_project;
#[ pin_project]
struct Foo<T> {
#[ cfg(any())]
#[ pin]
f: T,
#[ cfg(not(any()))]
f: T,
}
assert_unpin!(Foo<PhantomPinned>);
#[ pin_project]
struct Bar<T> {
#[ cfg(any())]
f: T,
#[ cfg(not(any()))]
#[ pin]
f: T,
}
assert_unpin!(Bar<()>);
assert_not_unpin!(Bar<PhantomPinned>);
}
pub mod cfg_attr {
use std::marker::PhantomPinned;
use pin_project::pin_project;
#[ cfg_attr(any(), pin_project)]
struct Foo<T> {
f: T,
}
assert_unpin!(Foo<()>);
assert_not_unpin!(Foo<PhantomPinned>);
#[ cfg_attr(not(any()), pin_project)]
struct Bar<T> {
#[ cfg_attr(not(any()), pin)]
f: T,
}
assert_unpin!(Bar<()>);
assert_not_unpin!(Bar<PhantomPinned>);
}
// pin_project(!Unpin)
pub mod not_unpin {
use std::marker::PhantomPinned;
use pin_project::pin_project;
struct Inner<T> {
f: T,
}
#[ pin_project(!Unpin)]
struct Struct <T, U> {
#[ pin]
inner: Inner<T>,
other: U,
}
assert_not_unpin!(Struct <(), ()>);
assert_not_unpin!(Struct <(), PhantomPinned>);
assert_not_unpin!(Struct <PhantomPinned, ()>);
assert_not_unpin!(Struct <PhantomPinned, PhantomPinned>);
#[ pin_project(!Unpin)]
struct TrivialBounds {
#[ pin]
f: PhantomPinned,
}
assert_not_unpin!(TrivialBounds);
#[ pin_project(!Unpin)]
struct PinRef<'a, T, U> {
#[ pin]
inner: &'a mut Inner<T>,
other: U,
}
assert_not_unpin!(PinRef<'_, (), ()>);
}
Messung V0.5 in Prozent C=100 H=100 G=100
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-20)
¤
*© Formatika GbR, Deutschland