mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-04 22:17:38 +00:00
40 lines
642 B
Rust
40 lines
642 B
Rust
![]() |
//@ revisions: current next
|
||
|
//@[next] compile-flags: -Znext-solver
|
||
|
//@[current] run-pass
|
||
|
|
||
|
#![feature(precise_capturing)]
|
||
|
#![allow(incomplete_features)]
|
||
|
|
||
|
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 use<'_> Get {
|
||
|
if n > 0 {
|
||
|
let mut iter = foo(n - 1, m);
|
||
|
//[next]~^ type annotations needed
|
||
|
assert_eq!(iter.get(), 1);
|
||
|
}
|
||
|
m
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let g = foo(1, &mut ()).get();
|
||
|
assert_eq!(g, 1);
|
||
|
}
|