Ответ 1
Результат хорошо определен и был с С++ 98. Оператор запятой вводит точку последовательности (или "упорядоченную до отношения" на более поздних С++) между записью и вторым чтением a
, и я не вижу других потенциальных причин для поведения undefined.