trait ConstMethod { fn value() -> usize; } impl<'a> ConstMethod for &'a u8 { fn value() -> usize { N } } #[test] fn method_const_follows_impl_lifetime() { assert_eq!(<&u8 as ConstMethod>::value::<7>(), 7); } trait Iter { type Item; } trait Outer { type A: Iter; } struct S; impl Iter for S { type Item = u32; } impl Outer for S { type A = S; } fn nested(value: <::A as Iter>::Item) -> <::A as Iter>::Item { let copied = value; let _also_copied = value; copied } #[test] fn nested_associated_item_bounds() { assert_eq!(nested::(9), 9); } fn unused_binder Fn() -> u32>(f: T) -> u32 { f() } #[test] fn unused_higher_ranked_lifetime() { assert_eq!(unused_binder(|| 11), 11); } trait Project<'a> { type Out; } impl<'a> Project<'a> for u32 { type Out = &'a u32; } fn project<'a>(value: &'a u32) -> >::Out { value } #[test] fn projection_preserves_lifetime() { let value = 13; assert_eq!(*project(&value), value); }