7 fn any_lifetime
<'a
>() -> &'a
u32 { &5 }
9 fn static_lifetime() -> &'
static u32 { &5 }
11 fn any_lifetime_as_static_impl_trait() -> impl Debug
{
15 fn lifetimes_as_static_impl_trait() -> impl Debug
{
19 fn no_params_or_lifetimes_is_static() -> impl Debug
+ '
static {
20 lifetimes_as_static_impl_trait()
23 fn static_input_type_is_static
<T
: Debug
+ '
static>(x
: T
) -> impl Debug
+ '
static { x }
25 fn type_outlives_reference_lifetime
<'a
, T
: Debug
>(x
: &'a T
) -> impl Debug
+ 'a { x }
26 fn type_outlives_reference_lifetime_elided
<T
: Debug
>(x
: &T
) -> impl Debug
+ '_ { x }
28 trait SingleRegionTrait
<'a
> {}
29 impl<'a
> SingleRegionTrait
<'a
> for u32 {}
30 impl<'a
> SingleRegionTrait
<'a
> for &'a
u32 {}
31 struct SingleRegionStruct
<'a
>(&'a
u32);
33 fn simple_type_hrtb
<'b
>() -> impl for<'a
> SingleRegionTrait
<'a
> { 5 }
34 fn elision_single_region_trait(x
: &u32) -> impl SingleRegionTrait { x }
35 fn elision_single_region_struct(x
: SingleRegionStruct
) -> impl Into
<SingleRegionStruct
> { x }
37 fn closure_hrtb() -> impl for<'a
> Fn(&'a
u32) { |_| () }
38 fn closure_hr_elided() -> impl Fn(&u32) { |_| () }
39 fn closure_hr_elided_return() -> impl Fn(&u32) -> &u32 { |x| x }
40 fn closure_pass_through_elided_return(x
: impl Fn(&u32) -> &u32) -> impl Fn(&u32) -> &u32 { x }
41 fn closure_pass_through_reference_elided(x
: &impl Fn(&u32) -> &u32) -> &impl Fn(&u32) -> &u32 { x }
43 fn nested_lifetime
<'a
>(input
: &'a
str)
44 -> impl Iterator
<Item
= impl Iterator
<Item
= i32> + 'a
> + 'a
46 input
.lines().map(|line
| {
47 line
.split_whitespace().map(|cell
| cell
.parse().unwrap())
51 fn pass_through_elision(x
: &u32) -> impl Into
<&u32> { x }
52 fn pass_through_elision_with_fn_ptr(x
: &fn(&u32) -> &u32) -> impl Into
<&fn(&u32) -> &u32> { x }
54 fn pass_through_elision_with_fn_path
<T
: Fn(&u32) -> &u32>(
56 ) -> &impl Fn(&u32) -> &u32 { x }
58 fn foo(x
: &impl Debug
) -> &impl Debug { x }
59 fn foo_explicit_lifetime
<'a
>(x
: &'a
impl Debug
) -> &'a
impl Debug { x }
60 fn foo_explicit_arg
<T
: Debug
>(x
: &T
) -> &impl Debug { x }
62 fn mixed_lifetimes
<'a
>() -> impl for<'b
> Fn(&'b
&'a
u32) { |_| () }
63 fn mixed_as_static() -> impl Fn(&'
static &'
static u32) { mixed_lifetimes() }
65 trait MultiRegionTrait
<'a
, 'b
>: Debug {}
68 struct MultiRegionStruct
<'a
, 'b
>(&'a
u32, &'b
u32);
69 impl<'a
, 'b
> MultiRegionTrait
<'a
, 'b
> for MultiRegionStruct
<'a
, 'b
> {}
72 struct NoRegionStruct
;
73 impl<'a
, 'b
> MultiRegionTrait
<'a
, 'b
> for NoRegionStruct {}
75 fn finds_least_region
<'a
: 'b
, 'b
>(x
: &'a
u32, y
: &'b
u32) -> impl MultiRegionTrait
<'a
, 'b
> {
76 MultiRegionStruct(x
, y
)
79 fn finds_explicit_bound
<'a
: 'b
, 'b
>
80 (x
: &'a
u32, y
: &'b
u32) -> impl MultiRegionTrait
<'a
, 'b
> + 'b
82 MultiRegionStruct(x
, y
)
85 fn finds_explicit_bound_even_without_least_region
<'a
, 'b
>
86 (x
: &'a
u32, y
: &'b
u32) -> impl MultiRegionTrait
<'a
, 'b
> + 'b
91 /* FIXME: `impl Trait<'a> + 'b` should live as long as 'b, even if 'b outlives 'a
92 fn outlives_bounds_even_with_contained_regions<'a, 'b>
93 (x: &'a u32, y: &'b u32) -> impl Debug + 'b
95 finds_explicit_bound_even_without_least_region(x, y)
99 fn unnamed_lifetimes_arent_contained_in_impl_trait_and_will_unify
<'a
, 'b
>
100 (x
: &'a
u32, y
: &'b
u32) -> impl Debug
102 fn deref
<'lt
>(x
: &'lt
u32) -> impl Debug { *x }
104 if true { deref(x) }
else { deref(y) }
107 fn can_add_region_bound_to_static_type
<'a
, 'b
>(_
: &'a
u32) -> impl Debug
+ 'a { 5 }
109 struct MyVec(Vec
<Vec
<u8>>);
111 impl<'unnecessary_lifetime
> MyVec
{
112 fn iter_doesnt_capture_unnecessary_lifetime
<'s
>(&'s
self) -> impl Iterator
<Item
= &'s
u8> {
113 self.0.iter
().flat_map(|inner_vec
| inner_vec
.iter())