Error code E0178
The +
type operator was used in an ambiguous context.
Erroneous code example:
#![allow(unused)] fn main() { trait Foo {} struct Bar<'a> { x: &'a Foo + 'a, // error! y: &'a mut Foo + 'a, // error! z: fn() -> Foo + 'a, // error! } }
In types, the +
type operator has low precedence, so it is often necessary
to use parentheses:
#![allow(unused)] fn main() { trait Foo {} struct Bar<'a> { x: &'a (Foo + 'a), // ok! y: &'a mut (Foo + 'a), // ok! z: fn() -> (Foo + 'a), // ok! } }
More details can be found in RFC 438.