Ответ 1
Результат зависит от того, поддерживает ли компилятор С++ 2017.
В соответствии со стандартом С++ 2017 (5.18 Операторы присваивания и составного присваивания)
1 Оператор присваивания (=) и составные операторы присваивания все группы справа налево. Все требуют модификации lvalue как их левые операнд и возвращает lvalue, ссылаясь на левый операнд. Результат во всех случаях это бит-поле, если левый операнд является битовым полем. В целом случаев, присваивание упорядочивается после вычисления значения правый и левый операнды, а перед вычислением значения выражение присваивания Правильный операнд секвенирован перед левым операнд.. Что касается вызова функции с неопределенной последовательностью, работа составного присвоения - это единая оценка
С другой стороны, в соответствии со стандартом С++ 2014 (5.18 Назначение и составные операторы присваивания)
1 Оператор присваивания (=) и составные операторы присваивания все группы справа налево. Все требуют модификации lvalue как их левые операнд и возвращает lvalue, ссылаясь на левый операнд. Результат во всех случаях это бит-поле, если левый операнд является битовым полем. В целом случаев, присваивание упорядочивается после вычисления значения правый и левый операнды, а перед вычислением значения присваивание. Что касается неопределенно-секвенированного вызов функции, операция составного присвоения является одиночным оценка.
Как вы можете видеть, выражение, выделенное полужирным шрифтом, отсутствует в цитате из стандарта С++ 2014.
Таким образом, вы не должны полагаться на порядок оценки левого и правого операндов.