Господа, вы в дискуссии о разнице между UB и UB!!! отошли от самого главного, а именно от того, определен ли
порядок вызовов функции f в коде
cout<<f(i++)<<f(i++).
мне кажется, что этот код эквивалентен
( cout.operator <<(f(i++)) ).operator <<(f(i++))
Второй вызов функции f может произойти только после того, как создастся временный объект. Где здесь может возникнуть неопределенность?
В свою очередь инкремент переменной i будет происходить дважды и опять-таки после вывода f(i) в поток вывода. пардон за каламбур, но пред очередным вызовом функции.
Если я что-то неправильно написал, просьба меня поправить
Внесены исправления автора — ПК