diff options
Diffstat (limited to 'src/test/ui/lifetimes/lifetime-doesnt-live-long-enough.rs')
-rw-r--r-- | src/test/ui/lifetimes/lifetime-doesnt-live-long-enough.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/test/ui/lifetimes/lifetime-doesnt-live-long-enough.rs b/src/test/ui/lifetimes/lifetime-doesnt-live-long-enough.rs new file mode 100644 index 000000000..d2b782c92 --- /dev/null +++ b/src/test/ui/lifetimes/lifetime-doesnt-live-long-enough.rs @@ -0,0 +1,49 @@ +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<T> { + foo: &'static T + //~^ ERROR may not live long enough +} + +trait X<K>: Sized { + fn foo<'a, L: X<&'a Nested<K>>>(); + //~^ ERROR may not live long enough + + // check that we give a sane error for `Self` + fn bar<'a, L: X<&'a Nested<Self>>>(); + //~^ ERROR may not live long enough + + // check that we give a sane error for nested generics + fn baz<'a, L, M: X<&'a Nested<L>>>() { + //~^ ERROR may not live long enough + } +} + +trait TraitB {} + +struct Nested<K>(K); +impl<K> Nested<K> { + fn generic_in_parent<'a, L: X<&'a Nested<K>>>() { + //~^ ERROR may not live long enough + } + fn generic_in_child<'a, 'b, L: X<&'a Nested<M>>, M: 'b>() { + //~^ ERROR may not live long enough + } +} + +fn main() {} |