rust/src/test/ui/consts/issue-102117.rs

31 lines
759 B
Rust
Raw Normal View History

2022-09-23 12:03:13 +00:00
#![feature(inline_const, 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 {
//~^ ERROR the parameter type `T` may not live long enough
//~| ERROR the parameter type `T` may not live long enough
&VTable {
layout: Layout::new::<T>(),
type_id: TypeId::of::<T>(),
drop_in_place: unsafe {
transmute::<unsafe fn(*mut T), unsafe fn(*mut ())>(drop_in_place::<T>)
},
}
}
}
}
fn main() {}