assert! теперь указывает на само условие, а не на весь вызов
15.08.2025Изменилось раскрытие макроса assert!: он раскрывается в выражение match вместо if !cond. Из-за этого в сообщении об ошибке указывается на само условие и исчезает упоминание трейта Not.
Что изменилось на практике
Раньше при передаче в assert! значения неподходящего типа компилятор указывал на весь вызов и добавлял отдельное сообщение о том, что выражению нужно реализовать Not. Теперь указка стоит точно на условии, а лишнее сообщение исчезает — диагностика получается короче и указывает на то место, где действительно ошибка.
Второй эффект: assert! больше не требует от условия реализации Not, поскольку match проверяет сам факт совпадения с true. Это снимает ограничение для типов, у которых Not реализовывать неудобно.
Изменение — estebank.
Оригинал
Change the desugaring of assert! for better error output
Упоминаний: 1 · Просмотров: 3