Предположим, что код был *p = (*q)++ + ++(*r);
В этом случае компилятор, как правило, не может знать, что, если какие-либо комбинации указателей идентифицируют одни и те же объекты. Хотя было бы просто заставить компилятор выдавать диагностику c в таких простых фрагментах кода, как ваша, вероятность того, что кто-нибудь случайно сможет написать такой код, была бы довольно отдаленной по сравнению с вероятностью сбоя при разделении операций на указатели, которые происходят, чтобы идентифицировать одни и те же объекты. Компилятор не собирается выдавать диагностику c для конструкции, если только автор или сопровождающий не напишет код для этого. Хотя авторы некоторых компиляторов тратят много усилий, включая такую диагностику, многие другие считают, что любое время и усилия, которые им придется потратить, включая такую диагностику, лучше потратить на поддержку других, более полезных функций.