From: Ian Jackson Date: Mon, 5 Jun 2023 18:05:20 +0000 (+0100) Subject: Fixed X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=190fa48cbfd805a714e01b1e9e76af92ae1c8614;p=rust-experiments.git Fixed --- 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) }