LINUX.ORG.RU

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

Исправление 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 не висят какие-то дополнительные трейты и диспатч происходит только по типам. Пример заодно показывает что нельзя сделать на классах. Конкретно плюсовые классы нельзя наследовать от встроенных примитивов, а вообще невозможно наследоваться от классов, хоть абстрактных хоть каких, которые ещё не существуют, ну или просто нельзя наследоваться по каким-то другим причинам.