Earlier quoted context omitted.
I've seen this example several times now, and I never got why it was so bad: it's mostly an objection to the namespace qualification syntax if anything. It would actually be written: use std::ops::Neg; struct Foo where P: Neg + 'a, ::Output: 'a { foo: &'a Bar , } And with further proposed improvements it would be: use std::ops::Neg; struct Foo where P: Neg + 'a, P::Output: 'a { foo: &'a Bar , } Not bad. It's saying "…
I think namespace qualification syntax and trait bounds make it more confusing ` ::Output: 'a` gives me eye cancer and my intuition is if `P: Neg + 'a` then `P::Output: 'a` is implied (why would it not have that bound if P does?) the Neg trait's Output IS Self (as Neg)! Why is the bound not transitive?
What if the output of the unary minus method was say, a constant 'static? This is a reasonable thing for a function to want to do in general. (Probably not for Neg in particular, but obviously we don't want to add special cases in the inference for specific traits.) The function needs to know about it because you can do many more things with a 'static than a 'a (as 'static references can never become dangling).