Rust errors / Ownership and borrowing
Rust compiler error · checked with rustc 1.99.0
Rust error E0227: ambiguous lifetime bound, explicit lifetime bound required
What it meansThis error indicates that the compiler is unable to determine whether there is exactly one unique region in the set of derived region bounds.
What rustc prints
error[E0227]: ambiguous lifetime bound, explicit lifetime bound required
--> main.rs:7:10
|
7 | baz: dyn FooBar<'foo, 'bar>,
| ^^^^^^^^^^^^^^^^^^^^^^Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
This error indicates that the compiler is unable to determine whether there is exactly one unique region in the set of derived region bounds.
Example of erroneous code:
trait Foo<'foo>: 'foo {}
trait Bar<'bar>: 'bar {}
trait FooBar<'foo, 'bar>: Foo<'foo> + Bar<'bar> {}
struct Baz<'foo, 'bar> {
baz: dyn FooBar<'foo, 'bar>,
}
Here, baz can have either 'foo or 'bar lifetimes.
To resolve this error, provide an explicit lifetime:
trait Foo<'foo>: 'foo {}
trait Bar<'bar>: 'bar {}
trait FooBar<'foo, 'bar>: Foo<'foo> + Bar<'bar> {}
struct Baz<'foo, 'bar, 'baz>
where
'baz: 'foo + 'bar,
{
obj: dyn FooBar<'foo, 'bar> + 'baz,
}From rustc --explain E0227 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0382borrow of moved value
- E0499cannot borrow as mutable more than once at a time
- E0502cannot borrow as mutable because it is also borrowed as immutable
- E0106missing lifetime specifier
- E0207the type parameter `T` is not constrained by the impl trait, self type, or predicates
- E0226only a single explicit lifetime bound is permitted
- E0228cannot deduce the lifetime bound for this trait object type from context
- E0261use of undeclared lifetime name `'a`
Up next
Often hit nextE0382: borrow of moved valueA related error from the same family.Read it next →Did this answer your question?