//@ revisions: current next | |
//@[next] compile-flags: -Znext-solver | |
//@[current] run-pass | |
trait Get { | |
fn get(&mut self) -> u32; | |
} | |
impl Get for () { | |
fn get(&mut self) -> u32 { | |
0 | |
} | |
} | |
impl<T> Get for &mut T | |
where | |
T: Get, | |
{ | |
fn get(&mut self) -> u32 { | |
T::get(self) + 1 | |
} | |
} | |
fn foo(n: usize, m: &mut ()) -> impl Get + use<'_> { | |
if n > 0 { | |
let mut iter = foo(n - 1, m); | |
//[next]~^ ERROR type annotations needed | |
assert_eq!(iter.get(), 1); | |
} | |
m | |
} | |
fn main() { | |
let g = foo(1, &mut ()).get(); | |
assert_eq!(g, 1); | |
} |