Did you post the wrong playground? Note that it seems you misunderstood my last comment in that thread — the <'b: 'a> thing seems like it solves the issue, but doesn't actually solve it because it does not allow 'b to be different from 'a.
for this to compile. The issue is that the bounds on the MyEndpoint struct failed to type-check
struct MyEndpoint<'a, T: MyTrait<'a>, G: MyTrait<'a>>
// ^ this, and ^ this
Since you had not specified the lifetime, it was elided to some other lifetime than 'a, and although T may implement MyTrait<'a>, it didn't implement MyTrait<'b>.
It's complaining about "expected MyTrait<'b>, found MyTrait<'_>". This means that we have a lifetime mismatch, and the underscore means that we have not named the lifetime.
What's MyTrait doing here? It doesn't show up on the method anywhere.
Oh, it's because the MyEndpoint requires it.
In particular, MyEndpoint requires MyTrait with the same lifetime as the one directly on the struct.
What lifetime was used in that spot in our method? Ah, it's missing. Add 'a and see that it compiles.
I think that knowing the code misled me but I was missing the "the underscore means that we have not named the lifetime" part. In my knowledge of the code, all the lifetimes were filled so it could have been ages before I realise that I forgot 2 chars… ^^'