Why do functions like u8::count_ones() and u8::trailing_zeros() return a u32?
Clearly, a u32 is not needed to represent all possible results; a u8 will do fine for all integer types.
If it's for efficiency, why not usize? Modern calling conventions use registers to pass arguments to routines. It seems matching this would result in more efficient code.