trait ListItem<'a> { fn list_name() -> &'a str; } trait Collection { fn len(&self) -> usize; } // is now well formed. RFC 2093 struct List<'a, T: ListItem<'a>> { slice: &'a [T] } impl<'a, T: ListItem<'a>> Collection for List<'a, T> { fn len(&self) -> usize { 0 } } struct Foo { foo: &'static T //~^ ERROR may not live long enough } trait X: Sized { fn foo<'a, L: X<&'a Nested>>(); //~^ ERROR may not live long enough // check that we give a sane error for `Self` fn bar<'a, L: X<&'a Nested>>(); //~^ ERROR may not live long enough // check that we give a sane error for nested generics fn baz<'a, L, M: X<&'a Nested>>() { //~^ ERROR may not live long enough } } trait TraitB {} struct Nested(K); impl Nested { fn generic_in_parent<'a, L: X<&'a Nested>>() { //~^ ERROR may not live long enough } fn generic_in_child<'a, 'b, L: X<&'a Nested>, M: 'b>() { //~^ ERROR may not live long enough } } fn main() {}