Почему работает (++i)++, но не работает ++(i++)?
(i++) возвращает число, константу, если упрощенно. Которую нельзя инкрементить, потому что это не переменная

(++i) же возвращает ссылку на переменную, которую можно инкрементнуть ещё раз.

например, ++(++i) - можно. (i++)++ - нельзя.
++i - увеличить переменную и вернуть ее. Результат этого выражения - сама переменная, вы можете применить к ней еще какие-нибудь операции, допустимые для переменной. Например, постфиксный инкремент.
i++ - вернуть значение переменной, а потом увеличить ее. Результат этого выражения - не переменная, а ее прошлое значение. С ним нельзя выполнять операции, требующие именно переменной. Например, префиксный инкремент.