plus.wrap minus.wrap times.wrap pow.wrap are always defined — modulo the type's size — so a hash needs no no_check.
wrapping.zg
# Wrapping arithmetic (decided 2026-09-20): plus.wrap minus.wrap times.wrap pow.wrap are always defined — modulo the# type's size — so a hash needs no no_check. Plain plus minus times pow stay overflow-checked.fnhash[lent'text':str.utf8]->uint32{let'h':uint32=2_166_136_261;# FNV-1afor'b'instr.each.byte[lend'text']{change'h'='h'xor'b';# FNV-1a: xor, then a wrapping multiplychange'h'='h'times.wrap16_777_619;# wraps instead of overflowing}return'h';}MAIN{std::print.useful[hash["hello"],newln];let'c':uint8=250;change'c'='c'plus.wrap10;# 260 wraps to 4std::print.useful['c',newln];let'i':int8=127;change'i'='i'plus.wrap1;# 128 wraps to -128std::print.useful['i',newln];let'p':uint16=3;change'p'='p'pow.wrap20;# 3^20 modulo 65536std::print.useful['p',newln];}