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