summaryrefslogtreecommitdiffstats
path: root/tests/ui/consts/issue-102117.rs
blob: 3ed90aed2350d4d8003b4b89440ad63973dc1540 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#![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 {
            &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() {}