Integer overflow is undefined behaviour. This means that implementations have a great deal of latitude in how they deal with signed integer overflow. An implementation that defines signed integer types as being modulo, for example, need not detect integer overflow. Implementations may also trap on signed arithmetic overflows, or simply assume that overflows will never happen and generate object code accordingly. For these reasons, it is important to ensure that operations on signed integers do no result in signed overflow.