В разделе порядка оценки говорится, что следующий код приводит к поведению undefined до С++ 17:
a[i] = i++;
Это происходит из-за неуказанного порядка при оценке левой и правой частей выражения присваивания.
С++ 14 standard 1.9/15 говорит:
Если побочный эффект скалярного объекта не зависит от другого побочного эффекта для одного и того же скалярного объекта или вычисления значения с использованием значения одного и того же скалярного объекта, и они не являются потенциально параллельными (1.10), поведение undefined.
Но что, если мы используем std::vector
и его объект iterator
вместо скалярного объекта i
?
std::vector<int> v = {1, 2};
auto it = v.begin();
*it = *it++; // UB?
Существует ли поведение undefined (до С++ 17) или нет?