summary refs log tree commit diff
path: root/tests/ui/impl-trait/method-resolution4.rs
blob: 91884eb59fd63d808d5f75a37e1cac6194c516a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//! The recursive method call yields the opaque type. The
//! `next` method call then constrains the hidden type to `&mut _`
//! because `next` takes `&mut self`. We never resolve the inference
//! variable, but get a type mismatch when comparing `&mut _` with
//! `std::iter::Empty`.

//@ revisions: current next
//@[next] compile-flags: -Znext-solver
//@[current] check-pass

fn foo(b: bool) -> impl Iterator<Item = ()> {
    if b {
        foo(false).next().unwrap();
        //[next]~^ type annotations needed
    }
    std::iter::empty()
    //[next]~^ mismatched types
}

fn main() {}