Error code E0657

An impl Trait captured a higher-ranked lifetime, which is not supported.

Currently, impl Trait types are only allowed to capture lifetimes from their parent items, and not from any for<'a> binders in scope.

Erroneous code example:

#![allow(unused)]
fn main() {
trait BorrowInto<'a> {
    type Target;

    fn borrow_into(&'a self) -> Self::Target;
}

impl<'a> BorrowInto<'a> for () {
    type Target = &'a ();

    fn borrow_into(&'a self) -> Self::Target {
        self
    }
}

fn opaque() -> impl for<'a> BorrowInto<'a, Target = impl Sized + 'a> {
    ()
}
}