Skip to content

Latest commit

 

History

History
36 lines (25 loc) · 662 Bytes

File metadata and controls

36 lines (25 loc) · 662 Bytes

In-band lifetimes has mixed with explicit lifetime binders.

Erroneous code example:

#![feature(in_band_lifetimes)]

fn foo<'a>(x: &'a u32, y: &'b u32) {}   // error!

struct Foo<'a> { x: &'a u32 }

impl Foo<'a> {
    fn bar<'b>(x: &'a u32, y: &'b u32, z: &'c u32) {}   // error!
}

impl<'b> Foo<'a> {  // error!
    fn baz() {}
}

We cannot mix in-band lifetimes with explicit lifetime binders. For example:

fn foo<'a, 'b>(x: &'a u32, y: &'b u32) {}   // ok!

struct Foo<'a> { x: &'a u32 }

impl<'a> Foo<'a> {
    fn bar<'b,'c>(x: &'a u32, y: &'b u32, z: &'c u32) {}    // ok!
}

impl<'a> Foo<'a> {  // ok!
    fn baz() {}
}