Ответ
Для маленьких типов это дороже, чем просто скопировать поля. Поэтому copy-on-write оставляют там, где данных много. У коллекций, у String, у Data. У обычного struct его нет, пока его не сделают сами.
Что copy-on-write добавляет в тип
- лишний объект в куче, даже если внутри одно число
- чтение и запись идут через обёртку
- проверка уникальности на каждое изменение
- копия данных в момент записи, если владельцев больше одного
- эту схему пришлось бы писать в каждом value type, даже в самом лёгком
struct