2018-08-30 07:18:55 -05:00
|
|
|
// run-pass
|
2016-08-30 23:40:43 -05:00
|
|
|
// Previously the closure's argument would be inferred to
|
|
|
|
// <S as ITrait<'a>>::Item, causing an error in MIR type
|
|
|
|
// checking
|
|
|
|
|
|
|
|
trait ITrait<'a> {type Item;}
|
|
|
|
|
|
|
|
struct S {}
|
|
|
|
|
|
|
|
impl<'a> ITrait<'a> for S { type Item = &'a mut usize; }
|
|
|
|
|
|
|
|
fn m<T, I, F>(_: F)
|
|
|
|
where I: for<'a> ITrait<'a>,
|
|
|
|
F: for<'a> FnMut(<I as ITrait<'a>>::Item) { }
|
|
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
m::<usize,S,_>(|x| { *x += 1; });
|
|
|
|
}
|