| //@ run-pass | |
| trait Factory { | |
| type Product; | |
| fn create(&self) -> <Self as Factory>::Product; | |
| } | |
| impl Factory for f64 { | |
| type Product = f64; | |
| fn create(&self) -> f64 { *self * *self } | |
| } | |
| impl<A: Factory, B: Factory> Factory for (A, B) { | |
| type Product = (<A as Factory>::Product, <B as Factory>::Product); | |
| fn create(&self) -> (<A as Factory>::Product, <B as Factory>::Product) { | |
| let (ref a, ref b) = *self; | |
| (a.create(), b.create()) | |
| } | |
| } | |
| fn main() { | |
| assert_eq!((16., 25.), (4., 5.).create()); | |
| } |