// build-pass #![allow(dead_code)] #![allow(unused_variables)] use std::any::TypeId; use std::rc::Rc; type Fp = Rc; struct Engine; trait Component: 'static {} impl Component for Engine {} trait Env { fn get_component_type_id(&self, type_id: TypeId) -> Option>; } impl<'a> dyn Env + 'a { fn get_component(&self) -> Option> { let x = self.get_component_type_id(TypeId::of::()); None } } trait Figment { fn init(&mut self, env: &dyn Env); } struct MyFigment; impl Figment for MyFigment { fn init(&mut self, env: &dyn Env) { let engine = env.get_component::(); } } fn main() {}