error[E0106]: missing lifetime specifier --> $DIR/elision.rs:5:70 | LL | fn f(x: &mut dyn Iterator>) -> Option<&'_ ()> { x.next() } | ------------------------------------------------ ^^ expected named lifetime parameter | = help: this function's return type contains a borrowed value, but the signature does not say which one of `x`'s 2 lifetimes it is borrowed from help: consider introducing a named lifetime parameter | LL | fn f<'a>(x: &'a mut dyn Iterator>) -> Option<&'a ()> { x.next() } | ++++ ++ ~~ ~~ error[E0308]: mismatched types --> $DIR/elision.rs:5:79 | LL | fn f(x: &mut dyn Iterator>) -> Option<&'_ ()> { x.next() } | ----------------------------- -------------- ^^^^^^^^ expected `&()`, found type parameter `impl Iterator` | | | | | expected `Option<&'static ()>` because of return type | this type parameter | = note: expected enum `Option<&'static ()>` found enum `Option>` error: aborting due to 2 previous errors Some errors have detailed explanations: E0106, E0308. For more information about an error, try `rustc --explain E0106`.