A lot of programs make either explicit or implicit assumptions about the various data types on which they operate. A common assumption made on workstations is that pointers and integers have the same number of bytes. While some of these problems can be detected during compilation, others hide operations with typecasts such as shown in the following example:
char *p; int ip; ip = (int)p;
On many systems this type of operation would be valid and would not cause any problems. However, when such code is ported to alternative architectures problems can arise. The code shown above would fail, for example, when executed on a PC (16-bit integer, 32-bit pointer) or a 64-bit architecture such as the AMD64 Linux (32-bit integer, 64-bit pointer).
In cases where such an operation loses information, Insure++ reports an error. On machines for which the data types have the same number of bits (or more), no error is reported.