1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
// run-pass trait Get { type Value; fn get(&self) -> &<Self as Get>::Value; } struct Struct { x: isize, } impl Get for Struct { type Value = isize; fn get(&self) -> &isize { &self.x } } fn grab<T:Get>(x: &T) -> &<T as Get>::Value { x.get() } fn main() { let s = Struct { x: 100, }; assert_eq!(*grab(&s), 100); }