In-band lifetimes cannot be used in fn
/Fn
syntax.
Erroneous code examples:
#![feature(in_band_lifetimes)] fn foo(x: fn(&'a u32)) {} // error! fn bar(x: &Fn(&'a u32)) {} // error! fn baz(x: fn(&'a u32), y: &'a u32) {} // error! struct Foo<'a> { x: &'a u32 } impl Foo<'a> { fn bar(&self, x: fn(&'a u32)) {} // error! }
Lifetimes used in fn
or Fn
syntax must be explicitly declared using <...>
binders. For example:
fn foo<'a>(x: fn(&'a u32)) {} // ok! fn bar<'a>(x: &Fn(&'a u32)) {} // ok! fn baz<'a>(x: fn(&'a u32), y: &'a u32) {} // ok! struct Foo<'a> { x: &'a u32 } impl<'a> Foo<'a> { fn bar(&self, x: fn(&'a u32)) {} // ok! }