I found the definition for std::borrow::BorrowMut:
pub trait BorrowMut: Borrow
where
Borrowed: ?Sized,
{
fn borrow_mu
It means that the trait is optional. The current syntax was introduced in the DST syntax RFC.
The only trait I am aware of that works for ? is Sized.
In this specific example, we can implement BorrowMut for unsized types, like [T] — note that there's no & here!
One built-in implementation makes use of that:
impl BorrowMut<[T]> for Vec
As Matthieu M. adds:
This is a case of a widening bound; in general bounds impose more constraints, but in the case of
Sizedit was decided that unless otherwise noted a genericTwould be assumed to beSized. The way to note the opposite would be to mark it?Sized("maybeSized").