//! 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 | |
//@ check-pass | |
fn foo(b: bool) -> impl Iterator<Item = ()> { | |
if b { | |
foo(false).next().unwrap(); | |
} | |
std::iter::empty() | |
} | |
fn main() {} |