Подтвердить что ты не робот

Что оценит я ++ + я ++ в С++ 17?

Похоже, мы получаем совершенно новую породу "вопросов интервью" для С++ (надеюсь, на самом деле нет).

Известно, что поведение undefined до С++ 17, но будет ли оно корректно определено из С++ 17?

Поскольку на данный момент не существует компилятора, который реализует эту модификацию С++ 17, может ли кто-нибудь объяснить, что будет, в соответствии с правилами оценки выражения, значением x быть в следующем коде?

int i = 0;
int x = i++ + i++;

Alisdair Meredith упоминает этот пример здесь в своем разговоре CppCon 2016, но мне не совсем понятно, что будет последним значением x (хотя кажется он говорит, что это будет как минимум 1).

Очевидно, что сам i в этом случае будет равен 2 в конце выражения.

4b9b3361

Ответ 1

P0145R3 (PDF) не меняет порядок оценки всех выражений. Это влияет только на небольшое число операторов. И двоичное добавление не входит в этот список.

Поэтому приведенный выше код остается undefined.