Ответ 1
"Поскольку второй выглядит как вызов функции, следовательно, в параметрах нет гарантированного порядка оценки?"
Действительно. [expr.call]/5 содержит пример, конкретно охватывающий разницу между двумя рассмотренными в вашем случае случаями [ emphasis mine]:
Постфикс-выражение секвенируется перед каждым выражением в список выражений и любой аргумент по умолчанию. Инициализация параметр, включающий вычисление всех связанных значений и сторон эффект неопределенно секвенирован по сравнению с любым другим Параметр.
...
Примечание. Если оператор-оператор вызывается с использованием обозначения оператора, оценка аргумента секвенирована, как указано для встроенного Оператор; видеть [over.match.oper]. [Пример:
struct S { S(int); }; int operator<<(S, int); int i, j; int x = S(i=1) << (i=2); int y = operator<<(S(j=1), j=2);
После выполнения инициализации значение
i
равно2
(см. [expr.shift]), но он не указан, является ли значениеj
1
или2
.- конец примера]