From 190fa48cbfd805a714e01b1e9e76af92ae1c8614 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 5 Jun 2023 19:05:20 +0100 Subject: [PATCH] Fixed --- src/main.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index d253eb7..959fa1b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ pub trait HasPseudoMethods: DowncastSync { } impl_downcast!(sync HasPseudoMethods); -trait HasFeet { +trait HasFeet: 'static { fn how_many_feet(&self) -> usize; } @@ -52,7 +52,27 @@ fn cast1(inp: &dyn HasPseudoMethods) -> Option<&dyn HasFeet> { fn cast2(inp: &dyn HasPseudoMethods) -> Option<&T> { dbg!(std::any::type_name::<&'static T>()); let caster: &'static dyn Any = inp.get_caster(TypeId::of::<&'static T>())?; - let caster: &'static fn (&dyn HasPseudoMethods) -> &T = caster.downcast_ref().unwrap(); + + let caster_f: &'static fn (&dyn HasPseudoMethods) -> &dyn HasFeet = caster.downcast_ref().unwrap(); + dbg!(caster, caster_f); + + dbg!( + TypeId::of::(), + TypeId::of::< +fn (&dyn HasPseudoMethods) -> &(dyn HasFeet + 'static) + >()); + dbg!( + TypeId::of::(), + TypeId::of::< +fn (&dyn HasPseudoMethods) -> &T + >()); + + let caster: &'static fn (&dyn HasPseudoMethods) -> &T = + caster.downcast_ref +//::< +// for <'x> fn (&'x dyn HasPseudoMethods) -> &'x T +// > +().unwrap(); let with_feet = caster(inp); Some(with_feet) } -- 2.30.2