In types, the +
type operator has low precedence, so it is often necessary to use parentheses.
For example:
trait Foo {} struct Bar<'a> { w: &'a Foo + Copy, // error, use &'a (Foo + Copy) x: &'a Foo + 'a, // error, use &'a (Foo + 'a) y: &'a mut Foo + 'a, // error, use &'a mut (Foo + 'a) z: fn() -> Foo + 'a, // error, use fn() -> (Foo + 'a) }
More details can be found in RFC 438.