LINUX.ORG.RU

История изменений

Исправление zurg, (текущая версия) :

Tо что мы определили трейт для i32, не значит что остальные типы для которых определён Trait должны перенять свойства i32, с чего вдруг? Поэтому компилятор и зарубает, прилететь может что угодно что удовлетворяет Trait но не умеет в +, т.е. надо клиенту кода дополнительно указать что можно подставлять:

pub fn add<T>(a: T, b: T) -> T
where T: Trait + Add<Output=T>
{
    return a + b;
}

В общем, и там и там параметрический полиморфизм, отличаются только РЕАЛИЗАЦИИ. Плюсы в месте определения ничего не проверяют(если без концептов), а просто бросают типы в стену в месте вызова, что прилипло то и ладно(та самая шаблонная утиная типизация), с очень увлекательной отладкой если ни что не подошло

Исходная версия zurg, :

Tо что мы определили трейт для i32, не значит что остальные типы для которых определён Trait должны перенять свойства i32, с чего вдруг? Поэтому компилятор и зарубает, прилететь может что угодно что удовлетворяет Trait но не умеет в +, т.е. надо клиенту кода дополнительно указать что можно подставлять:

pub fn add<T>(a: T, b: T) -> T
where T: Trait + Add<Output=T>
{
    return a + b;
}

В общем и там и там параметрический полиморфизм, отличаются только РЕАЛИЗАЦИЯМИ. Плюсы в месте определения ничего не проверяют(если без концептов), а просто бросают типы в стену в месте вызова, что прилипло то и ладно(та самая шаблонная утиная типизация), с очень увлекательной отладкой если ни что не подошло