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<T> BorrowMut<[T]> for Vec<T>
As Matthieu M. adds:
This is a case of a widening bound; in general bounds impose more constraints, but in the case of Sized
it was decided that unless otherwise noted a generic T
would be assumed to be Sized
. The way to note the opposite would be to mark it ?Sized
("maybe Sized
").
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…