Currently if you have multiple lifetimes with restrictions, the impl will not require you to restate these restrictions, but it does require you to explicit every lifetime argument everywhere:
You can also change to fn new(x: X<'a, 'b, 'c>) -> Self, which is probably what I would actually write.
Note that I would also like to introduce conventions (enforced by lint, ideally) that any region name which cross binding levels must be “meaningful” – since that is hard to quantify, the lint would probably just check that they are more than one letter =).