Оператор запятой гарантирует порядок оценки слева направо.
[n3290: 5.18/1]
: операторы запятых группируются слева направо.
expression:
assignment-expression
expression , assignment-expression
Пара выражений, разделенных запятой, оценивается слева направо ;
левое выражение является выражением отброшенного значения (раздел 5). Каждый
вычисление значения и побочный эффект, связанный с левым выражением
последовательность перед каждым вычислением значения и побочным эффектом
с правильным выражением. Тип и значение результата
тип и значение правого операнда; результат того же значения
категория как его правый операнд, и битовое поле, если его правый операнд
является glvalue и битовым полем.
Единственный другой пункт, касающийся оператора, не упоминает порядок оценки. Так что может показаться, что это все еще тот случай, когда оператор был перегружен.
Но затем, далее, в общем уровне выражений, конечно, утверждается, что правила меняются при перегрузке операторов:
[n3290: 5/2]:
[ Примечание: Операторы могут быть перегружены, то есть заданы
значение применительно к выражениям типа класса (раздел 9) или
тип перечисления (7.2). Использование перегруженных операторов трансформируется
в вызовы функций, как описано в 13.5. перегруженные операторы подчиняются
правила синтаксиса, указанные в п. 5, но требования
тип операнда, категория значения и порядок оценки заменяются
правила для вызова функции. Отношения между операторами, такие как ++a
значение a+=1
, не гарантируется для перегруженных операторов (13.5), и
не гарантируются для операндов типа bool
. - Конечная заметка ]
Однако, это ненормативный текст. Есть ли нормативный текст, определяющий это правило, или совместимый компилятор может его игнорировать?