src/plop2.rs
pub struct PhantomUndrop<const ALIVE: bool>;
impl PhantomUndrop<true> {
pub const fn forget(self) -> PhantomUndrop<false> {
unsafe { core::mem::transmute(self) }
}
}
impl<const ALIVE: bool> Drop for PhantomUndrop<ALIVE> {
fn drop(&mut self) {
const { assert!(!ALIVE) }
}
}
fn main() {
let u = PhantomUndrop::<true>;
u.forget();
}