use crate::*;
#[macro_export]
macro_rules! take {
($loaned:expr) => {{
let mut loaned = ();
unsafe { $crate::__take($loaned, &mut loaned) }
}};
}
#[macro_export]
macro_rules! drop {
($loaned:expr) => {{
let loaned_value;
let mut loaned = ();
loaned_value = unsafe { $crate::__take($loaned, &mut loaned) };
let _ = loaned_value;
}};
}
#[doc(hidden)]
pub unsafe fn __take<'t, T: 't, L: Placeable<'t, T>>(loaned: L, _: &'t mut ()) -> T {
let mut place = MaybeUninit::uninit();
loaned.place(unsafe { &mut *(&mut place as *mut _) });
place.assume_init()
}
mod test_drop_cyclic {
mod no_drop {}
mod drop_eyepatch {}
mod bad_drop {}
}