а
ну условно есть функция которая может принимать любые одинаковые типы, складывать их и возвращать тот же тип
fn sum<T: core::ops::Add> (a: T, v: T) -> T {
a + v
}
теперь мы вызываем ее, например, с шортом
sum(14i16, 15i16) => ну то бишь передаем два инта размером 2 байта
компилятор сгенерирует такой код для этой функции, который умеет складывать ворды (2 байта)
после вызовем уже с даблом - тогда компилятор сгенерирует уже новый код, уже другую функцию, пусть и выполняющую по сути то же самое, но которая уже умеет работать с даблами