Если что-то работает, но вы думаете, что не должно работать в настоящий момент, это может быть связано с одним из следующих.
Преобразования - ослабляет типы для соответствия сигнатуре, например, `&mut T к &T`.
Разыменования - разыменование `x: T` до `*x`, `**x`, ... совместимы с некоторыми назначениями `S`.
Прелюдия - автоматический импорт основных элементов, например, `Option, drop()`,...
Одолжение - поскольку `x: &mut T` не может быть скопировано, перемещает в новый `&mut *x`.
Время жизни - позволяет записать `f(x: &T)` вместо `f<'a>(x: &'a T)` для краткости.
Разрешения метода - разыменовывает или заимствует `х` до тех пор, пока не сработает `x.f()`.
Сопоставления шаблонов - многократно отменяет проверку и добавляет к привязкам `ref` и `ref mut`.
Статическое повышение R-value - делает ссылки на статические константы, например, `&42`, `&None`, `&mut []`.
Двойные определения - определение одного (например, структуры `S(u8))` неявно определяет другое (например, `fn S`).
Примечание: эти особенности облегчают вашу жизнь, используя Rust, но мешают ее усвоению. Если вы хотите развить подлинное понимание, потратьте дополнительное время на их изучение.
Статья на list-site.