| //! Checks the correct usage and behavior of the anonymous lifetime `'_` (underscore lifetime) |
| |
| //@ run-pass |
| |
| #![allow(dead_code, mismatched_lifetime_syntaxes)] |
| |
| struct Foo<'a>(&'a u8); |
| |
| fn foo(x: &u8) -> Foo<'_> { |
| Foo(x) |
| } |
| |
| fn foo2(x: &'_ u8) -> Foo<'_> { |
| Foo(x) |
| } |
| |
| fn foo3(x: &'_ u8) -> Foo { |
| Foo(x) |
| } |
| |
| fn foo4(_: Foo<'_>) {} |
| |
| struct Foo2<'a, 'b> { |
| a: &'a u8, |
| b: &'b u8, |
| } |
| fn foo5<'b>(foo: Foo2<'_, 'b>) -> &'b u8 { |
| foo.b |
| } |
| |
| fn main() { |
| let x = &5; |
| let _ = foo(x); |
| let _ = foo2(x); |
| let _ = foo3(x); |
| foo4(Foo(x)); |
| let _ = foo5(Foo2 { a: x, b: &6 }); |
| } |