subtyping.variance.user-composite-types has a wording
If the parameter is used in positions with different variances then the parameter is invariant.
However, it applies only to struct, enum, and union types
subtyping.variance.builtin-composite-types specifies the rules
When used outside of an struct, enum, or union, the variance for parameters is checked at each location separately.
However, it seems to only apply to tuple and function types.
Consider this type
struct A<'a>(&'a ());
type F<'b> = &'b mut A<'b>
The reference lacks the wording to specify the variance of lifetime 'b. That is, in &'b T, 'b is covariant and T is invariant.
It seems that 'b is expected to be invariant in type &'b mut A<'b>.