Является ли результат выражения UB?
Всё сложно, так как стандарт меняется.i = i++;  // Это было неопределённым поведением до C++17
i = ++i;  // А это было неопределённое поведение до C++11
p[i] = i++;  // Это было неопределённым поведением до C++17
Ещё на эту тему см. V567.
В общем, теперь всё ещё более запутано и фиг разберёшься. :)
Что делать? А просто не надо писать такие конструкции. Даже если теперь они стали корректными. Они путают программиста, читающего код и заставляют задумываться. Не делайте так. И пользуйтесь анализаторам PVS-Studio. Он укажет на непроектные и плохо написанные фрагменты кода.
Все UB кроме последнего, потому что "=" не является точкой следования.