// run-pass #![allow(dead_code)] // Test that we are handle to correctly handle a projection type // that appears in a supertrait bound. Issue #20559. trait A { type TA; fn dummy(&self) { } } trait B { fn foo (&self, t : TB) -> String; } trait C : B<::TA> { } struct X; impl A for X { type TA = i32; } struct Y; impl C for Y { } // Both of these impls are required for successful compilation impl B for Y { fn foo (&self, t : i32) -> String { format!("First {}", t) } } fn main () { let y = Y; assert_eq!(y.foo(5), format!("First 5")); }