Size: a a a

2021 March 05

RB

Roman Blog in rust_offtopic
а далее мы все засываем их в sum и нужно сложить всё это
источник

SP

Stanislav Popov in rust_offtopic
но что ты показываешь? почему с шаблонами не работает?
источник

RB

Roman Blog in rust_offtopic
вот проблема там в том, что у него функция описана как T sum_govna(T t
источник

RB

Roman Blog in rust_offtopic
т.е. у него функция возвращает тот же тип, который принимает
источник

SP

Stanislav Popov in rust_offtopic
нужны сумтипы )
источник

RB

Roman Blog in rust_offtopic
очевидно, что полиморфный sum не можете возвращать тот же тип, который принимает.
источник

RB

Roman Blog in rust_offtopic
не, нужно порождение нового типа. Потому что операция порождает новый тип. Вот представь, что 1, 2,3 - это типы. Разные. Значения - типы. Я выше об этом говорил
источник

RB

Roman Blog in rust_offtopic
вот можешь ли ты написать 1 == (1 + 2)
источник

SP

Stanislav Popov in rust_offtopic
ну а откуда взять новый тип если ты вообще не знаешь до разворачивания шаблона ничего о них?
источник

RB

Roman Blog in rust_offtopic
нет, не можешь. 1 + 2 - не будет 1, а будет 3. Т.е. появляется тип, которого не было.
источник

RB

Roman Blog in rust_offtopic
Stanislav Popov
ну а откуда взять новый тип если ты вообще не знаешь до разворачивания шаблона ничего о них?
А зачем это знать? Это узнаётся тогда, когда ты передаёшь туда все аргументы. И уже из этого можно получить новый тип
источник

RB

Roman Blog in rust_offtopic
мы же не знаем какой будет результат у add пока мы его не вызовем? Так же и тут
источник

SP

Stanislav Popov in rust_offtopic
ээм а почему версия с auto работает?
источник

SP

Stanislav Popov in rust_offtopic
а, потому что она перегружена
источник

SP

Stanislav Popov in rust_offtopic
хотя sum_govna тоже перегружена
источник

RB

Roman Blog in rust_offtopic
потому что там используются специальные чиселки, да. Где операция реализована правильная
источник

SP

Stanislav Popov in rust_offtopic
ох блет как же сложно
источник

RB

Roman Blog in rust_offtopic
вот он тебе пишет 'integral_constant<[...],4950>' to 'integral_constant<[...],0>'
источник

RB

Roman Blog in rust_offtopic
у нам же (0, 1, 2, ...)
источник

RB

Roman Blog in rust_offtopic
т.е. у него T выводится как 0, а значит тип возврата 0. А реальный, который был посчитан - 4950
источник