# VBox VBox is a type erased Box of trait object that stores the vtable pointer. `VBox` is just like a `Box` but erases type `Trait` so that to use it, there is no need to have `Trait` as one of its type parameters. Only the creator and the consumer needs to agree on the type parameters. Internally, it stores the trait object’s data pointer in a `Box`, so that the `Drop::drop()` will be called when the wrapper is dropped. And it stores the vtable pointer in another `usize` to make sure it is `Send`. ## [Example](#example) ```rust // Pack a u64 into a `Debug` trait object and erase the type `Debug`. let vbox: VBox = into_vbox!(dyn Debug, 10u64); // Unpack to different trait object will panic: // let _panic = from_vbox!(dyn Display, vbox); // Unpack the `Debug` trait object. let unpacked: Box = from_vbox!(dyn Debug, vbox); assert_eq!("10", format!("{:?}", unpacked)); ```