A strict smoothing rule allows the compiler to assume that the same memory location cannot be obtained through two or more pointers of different types.
Consider the following code:
int* pi = ...;
double* pd = ...;
const int i1 = *pi;
*pd = 123.456;
const int i2 = *pi;
, i2 == i1, , pi, (1) (3). i1 i2 ( , ). , .
malloc(). (.. , ... ummm... , - char[] , char s). , , . , . POD a reinterpret_cast ( ) , new. .