| The lifetime bound for this object type cannot be deduced from context and must |
| be specified. |
| |
| Erroneous code example: |
| |
| ```compile_fail,E0228 |
| trait Trait { } |
| |
| struct TwoBounds<'a, 'b, T: Sized + 'a + 'b> { |
| x: &'a i32, |
| y: &'b i32, |
| z: T, |
| } |
| |
| type Foo<'a, 'b> = TwoBounds<'a, 'b, dyn Trait>; |
| ``` |
| |
| When a trait object is used as a type argument of a generic type, Rust will try |
| to infer its lifetime if unspecified. However, this isn't possible when the |
| containing type has more than one lifetime bound. |
| |
| The above example can be resolved by either reducing the number of lifetime |
| bounds to one or by making the trait object lifetime explicit, like so: |
| |
| ``` |
| trait Trait { } |
| |
| struct TwoBounds<'a, 'b, T: Sized + 'a + 'b> { |
| x: &'a i32, |
| y: &'b i32, |
| z: T, |
| } |
| |
| type Foo<'a, 'b> = TwoBounds<'a, 'b, dyn Trait + 'b>; |
| ``` |
| |
| For more information, see [RFC 599] and its amendment [RFC 1156]. |
| |
| [RFC 599]: https://github.com/rust-lang/rfcs/blob/master/text/0599-default-object-bound.md |
| [RFC 1156]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md |