Как говорит @IlCapitano, ваш второй pop()
может вызываться первым:
В C ++ нет концепции оценки слева направо или справа налево. Это не следует путать с ассоциативностью операторов слева направо и справа налево: выражение a () + b () + c () разбирается как (a () + b ()) + c () из-за ассоциативности слева направо оператора +, но вызов функции c может быть оценен первым, последним или между a () или b () во время выполнения
Ключ: вызов функции c может быть оценен первым, последним или между a () или b () во время выполнения .
В ответ на комментарий:
порядок оценки не указан (за некоторыми исключениями). Компилятор может вычислять операнды и другие подвыражения в любом порядке и может выбрать другой порядок при повторном вычислении того же выражения.
Так что это зависит от компилятора. Каждый делает это по-своему.