Ваша функция подкачки на самом деле ничего не меняет, потому что она принимает аргументы по значению, а не по ссылке. Все, что вы делаете, это манипулируете переменными, которые являются локальными для этой функции.
Когда вы не вводите это до после main
, это не входит в область действия, когда вы вызываете его, поэтомуstd::swap
используется вместо. std::swap
работает правильно.
Хотя вы специально не сказали std::swap
, вы написали using namespace std;
, который снимает это требование (веская причина не делать этого !!). И, хотя вы этого не сделали #include <algorithm>
, вы не можете гарантировать, какие стандартные заголовки могут оказаться, в том числе и другие, в силу того, как реализована реализация.