The goal was to ensure that all specialising impls are always applicable. There were some compromises so that all the impls in libstd (except those removed in the linked PR) are allowed.

To allow the required impls, I had to consider the bounds from the specialized impl. I also had to whitelist some marker traits (via attribute) as being ok to specialize on (this is unsound for traits other than Sized, but can't be exploited in the same way as traits with items).

I'm unsure if we can keep all of the TrustedRandomAccess impls that we currently have.

To allow the required impls, I had to consider the bounds from the specialized impl. I also had to whitelist some marker traits (via attribute) as being ok to specialize on (this is unsound for traits other than Sized, but can't be exploited in the same way as traits with items).

this is kind of the "more advanced" variant of "always applicable" that I initially proposed?