itr
продвигается в коде пять раз при различных условиях.
advance(itr, j); //first for loop, j can be equal to li.size()-1
advance(itr, i); //second for loop, i can be equal to j-1
advance(itr, i + 1); //first if conditional, i can be equal to j-1
advance(itr, i); //first if conditional, i can be equal to j-1
advance(itr, i + 1); //second if conditional, i can be equal to j-1
Многократное продвижение итератора в конечном итоге приводит к увеличению неинкрементируемого итератора (итератор за окончанием конца).Это приводит к неопределенному поведению согласно документации .