Since #78181, we leverage our auto trait impl synthesizer to render negative impls of Sized for types that don't implement Sized. Contrary to actual auto traits, we intentionally never render any positive Sized impls, only negative ones or none at all. Most ADTs are unconditionally Sized, so it makes sense to omit these to avoid unnecessary visual clutter and to reduce page size.
Quick aside: Sized is not an auto trait, so ideally synthetic Sized impls wouldn't appear under a section titled Auto Trait Implementations but instead under one titled Built-in Trait Implementations (modulo bikeshedding).
I take issue with the fact that we don't render "non-trivial" built-in Sized impls. Why bother? Well, Sized is fundamental (so making a type Sized is a breaking change) and under which conditions the last field of a struct is Sized is technically part of the public API and should thus be accessible in rustdoc-generated docs.
If rustdoc@main doesn't render a Sized impl for certain generic types, they are either unconditionally or conditionally sized but sadly no further information is provided. Consider these examples:
struct Type<X: ?Sized>
- is
Type<T> Sized for all types T? holds if body is e.g., (Box<T>)
- is
Type<T> Sized iff T is Sized for all types T? holds if body is e.g., (T)
struct Type<X: Deref>
- is it unconditionally sized?
- is it
Sized iff <T as Deref>::Target is Sized for all types T?
struct Type<X: ?Sized, Y: ?Sized>
- which type param is responsible if any?
- [and so on]
Potential CON: Could increase the artifact size for certain (a lot of?) crates. Rn it's unclear to me how bad the fallout would be. Needs to be investigated.
Since #78181, we leverage our auto trait impl synthesizer to render negative impls of
Sizedfor types that don't implementSized. Contrary to actual auto traits, we intentionally never render any positiveSizedimpls, only negative ones or none at all. Most ADTs are unconditionallySized, so it makes sense to omit these to avoid unnecessary visual clutter and to reduce page size.Quick aside:
Sizedis not an auto trait, so ideally syntheticSizedimpls wouldn't appear under a section titled Auto Trait Implementations but instead under one titled Built-in Trait Implementations (modulo bikeshedding).I take issue with the fact that we don't render "non-trivial" built-in
Sizedimpls. Why bother? Well,Sizedis fundamental (so making a typeSizedis a breaking change) and under which conditions the last field of a struct isSizedis technically part of the public API and should thus be accessible in rustdoc-generated docs.If rustdoc@main doesn't render a
Sizedimpl for certain generic types, they are either unconditionally or conditionally sized but sadly no further information is provided. Consider these examples:struct Type<X: ?Sized>Type<T>Sizedfor all typesT? holds if body is e.g.,(Box<T>)Type<T>SizediffTisSizedfor all typesT? holds if body is e.g.,(T)struct Type<X: Deref>Sizediff<T as Deref>::TargetisSizedfor all typesT?struct Type<X: ?Sized, Y: ?Sized>Potential CON: Could increase the artifact size for certain (a lot of?) crates. Rn it's unclear to me how bad the fallout would be. Needs to be investigated.