Как цепочка static_cast четко определена?
(5.2.9/10) Значение r типа "указатель на cv1 void" может быть преобразовано в значение типа "указатель на cv2 T", где T - тип объекта, а cv2 - та же квалификация cv, что и более cv-квалификация, чем, cv1. Значение указателя типа на объект, преобразованное в "указатель на cv void" и обратно в исходный тип указателя, будет иметь свое первоначальное значение.
Так как, результат кастинга из void*
должен быть int*
(оригинальный тип указателя) Итак, что делает следующий приведенный код действительным?
int i = 10;
double *pd_2 = static_cast<double*>(static_cast<void*>(&i));