// run-pass // Tests that everything still compiles and runs fine even when // we reorder the bounds. trait A { fn a(&self) -> usize; } trait B { fn b(&self) -> usize; } trait C { fn combine(&self, t: &T) -> usize; } struct Foo; impl A for Foo { fn a(&self) -> usize { 1 } } impl B for Foo { fn b(&self) -> usize { 2 } } struct Bar; impl C for Bar { // Note below: bounds in impl decl are in reverse order. fn combine(&self, t: &T) -> usize { (t.a() * 100) + t.b() } } fn use_c(s: &S, t: &T) -> usize { s.combine(t) } pub fn main() { let foo = Foo; let bar = Bar; let r = use_c(&bar, &foo); assert_eq!(r, 102); }