Well the other idea mentioned in that thread is to allow trait impls to be generic in their associate types. eg. allow impls like this:
// T not used on Future or !, just on the associated type.
impl<T> Future for ! {
type Output = T;
...
}
Which would make <! as Future>::Output
a type variable which can unify with anything. I don't know if this is sound though.