Это чистое соглашение, и оно не задано в камне, но оно имеет некоторые достоинства.
Специальный синтаксис ?Sized
позволяет компилятору удалить эту границу, если она не подходит (при мономорфизме),Таким образом, имеет смысл в некоторой степени разделить его и поместить его в общее определение, а не в предложение where
, для удобства чтения и отделить тот факт, что, в отличие от других, он не является строгим, жесткимmarker.
Некоторые библиотеки идут еще дальше и перечисляют все маркеры в общем определении и все признаки в предложении where
.
Как указано в комментариях и найдено @PeterHall через журнал коммитов, до ржавчины 1.15, ?Sized
был доступен только как требование черты в определении типа. Этот PR изменил это на поведение, которое мы имеем сегодня.