// build-pass trait Trait { type Item; } impl<'a, X> Trait for &'a Vec { type Item = &'a X; } impl Trait for Box> { type Item = X; } fn make_dyn_trait(_: &()) -> Box> { todo!() } fn diff<'a, M, N, S>(_: N, _: S) where M: 'a, N: Trait, S: Trait, { todo!() } fn may_panic(_: X) { } fn main() { let dyn_trait = make_dyn_trait(&()); let storage = vec![()]; let _x = may_panic(()); let storage_ref = &storage; diff(dyn_trait, storage_ref); }