Я знаю, что написание чего-то вроде
++a = a++;
не только нечитаемо, но и нарушает точки последовательности c/c++.
Откуда берутся эти ограничения? Как можно увидеть эти «проблемы», прежде чем найти в них ошибки?