UnsafeCell が ?Sized 付けてるからといって Mutex がそれを継承する必要があるわけでもないので、やっぱり多分なにか理由はあるんだよね……
impl<T: ?Sized + Default> Default for Mutex<T>
とかシレっと書いてあるけどさ、 Default は Self を返すから ?Sized な型は実際ありえないでしょ……
impl<T> From<T> for Mutex<T> でちゃんと T: Sized になってるあたりそれは意識してるっぽいし、「将来的に unsized な値を扱えるようになったとき (???) Mutex 関連の制約を変化させずに済むように」みたいなお気持ちはあるのかもしれないけど……
意識してるっぽいというか、単に ?Sized では実装書けないというだけの話だけど
unsized_locals - The Rust Unstable Book
https://doc.rust-lang.org/beta/unstable-book/language-features/unsized-locals.html
こういうこともできなくはないから……
そういえば実用上のケースでは Mutex は Arc や参照で用いられるので、 Arc<Mutex<T>> や &Mutex<T> (なお T は unsized) な場合に特別な最適化をかけるみたいなことがありえるのか。ありえそう。
Why unsized local is not allowed in user code but it's widely mentioned in docs? - help - The Rust Programming Language Forum
https://users.rust-lang.org/t/why-unsized-local-is-not-allowed-in-user-code-but-its-widely-mentioned-in-docs/44235
これ、まさにこれっぽい話題だ
コメントしとこ