История изменений
Исправление zurg, (текущая версия) :
Фича текущей реализации, именнованный конст глобален по всем генерик экземплярам функции, соответсвенно не может иметь возможные разные значения. Есть rfc и фича в экспериментальном статусе которая «исправляет» такое поведение. Но это не имеет отношения к выводу типов. Вот это имеет: https://godbolt.org/z/ac6hhjWG4 - по другую сторону орфанного правила.
pub fn add<B, Out, A: AddOp<B,Out>>(a:A, b:B )-> Out {
a.add_op(b)
}
на B и Out не висят какие-то дополнительные трейты и диспатч происходит только по типам. Пример заодно показывает что нельзя сделать на классах. Конкретно плюсовые классы нельзя наследовать от встроенных примитивов, а вообще, невозможно наследоваться от классов, хоть абстрактных хоть каких, которые ещё не существуют, ну или просто нельзя наследоваться по каким-то другим причинам.
Исправление zurg, :
Фича текущей реализации, именнованный конст глобален по всем генерик экземплярам функции, соответсвенно не может иметь возможные разные значения. Есть rfc и фича в экспериментальном статусе которая «исправляет» такое поведение. Но это не имеет отношения к выводу типов. Вот это имеет: https://godbolt.org/z/ac6hhjWG4 - по другую сторону орфанного правила.
pub fn add<B, Out, A: AddOp<B,Out>>(a:A, b:B )-> Out {
a.add_op(b)
}
на B и Out не висят какие-то дополнительные трейты и диспатч происходит только по типам. Пример заодно показывает что нельзя сделать на классах. Конкретно плюсовые классы нельзя наследовать от встроенных примитивов, а вообще невозможно наследоваться от классов, хоть абстрактных хоть каких, которые ещё не существуют, ну или просто нельзя наследоваться по каким-то другим причинам.
Исходная версия zurg, :
Фича текущей реализации, именнованный конст глобален по всем генерик экземплярам функции, соответсвенно не может иметь возможные разные значения. Есть rfc и фича в экспериментальном статусе которая «исправляет» такое поведение. Но это не имеет отношения к выводу типов. Вот это имеет: https://godbolt.org/z/ac6hhjWG4 - по другую сторону орфанного правила. Функция
pub fn add<B, Out, A: AddOp<B,Out>>(a:A, b:B )-> Out {
a.add_op(b)
}
на B и Out не висят какие-то дополнительные трейты и диспатч происходит только по типам. Пример заодно показывает что нельзя сделать на классах. Конкретно плюсовые классы нельзя наследовать от встроенных примитивов, а вообще невозможно наследоваться от классов, хоть абстрактных хоть каких, которые ещё не существуют, ну или просто нельзя наследоваться по каким-то другим причинам.