| //@ run-pass |
| #![allow(unused_mut)] |
| // Test that when instantiating trait default methods, typeck handles |
| // lifetime parameters defined on the method bound correctly. |
| |
| |
| pub trait Foo { |
| fn bar<'a, I: Iterator<Item=&'a ()>>(&self, it: I) -> usize { |
| let mut xs = it.filter(|_| true); |
| xs.count() |
| } |
| } |
| |
| pub struct Baz; |
| |
| impl Foo for Baz { |
| // When instantiating `Foo::bar` for `Baz` here, typeck used to |
| // ICE due to the lifetime parameter of `bar`. |
| } |
| |
| fn main() { |
| let x = Baz; |
| let y = vec![(), (), ()]; |
| assert_eq!(x.bar(y.iter()), 3); |
| } |