#![feature(thin_box)] // run-pass use std::boxed::ThinBox; use std::error::Error; use std::ops::Deref; use std::fmt; fn main() { let expected = "Foo error!"; let mut dropped = false; { let foo = Foo(expected, &mut dropped); let a: ThinBox = ThinBox::new_unsize(foo); let a = a.deref(); let msg = a.to_string(); assert_eq!(expected, msg); } assert!(dropped); } #[derive(Debug)] #[repr(align(1024))] struct Foo<'a>(&'static str, &'a mut bool); impl Drop for Foo<'_> { fn drop(&mut self) { *self.1 = true; } } impl fmt::Display for Foo<'_> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{}", self.0) } } impl Error for Foo<'_> {}