}
impl_downcast!(sync HasPseudoMethods);
-trait HasFeet {
+trait HasFeet: 'static {
fn how_many_feet(&self) -> usize;
}
fn cast2<T:?Sized+'static>(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::<dyn HasFeet>(),
+ TypeId::of::<
+fn (&dyn HasPseudoMethods) -> &(dyn HasFeet + 'static)
+ >());
+ dbg!(
+ TypeId::of::<T>(),
+ 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)
}