| #![feature(const_type_id)] |
| |
| use std::alloc::Layout; |
| use std::any::TypeId; |
| use std::mem::transmute; |
| use std::ptr::drop_in_place; |
| |
| pub struct VTable { |
| layout: Layout, |
| type_id: TypeId, |
| drop_in_place: unsafe fn(*mut ()), |
| } |
| |
| impl VTable { |
| pub fn new<T>() -> &'static Self { |
| const { |
| &VTable { |
| layout: Layout::new::<T>(), |
| type_id: TypeId::of::<T>(), |
| //~^ ERROR the parameter type `T` may not live long enough |
| //~| ERROR the parameter type `T` may not live long enough |
| drop_in_place: unsafe { |
| transmute::<unsafe fn(*mut T), unsafe fn(*mut ())>(drop_in_place::<T>) |
| }, |
| } |
| } |
| } |
| } |
| |
| fn main() {} |