Ваша swap
функция вообще не вызывается.
Одна из стандартных библиотек, которую вы включили, включает <utility>
, которая объявляет шаблон функции с именем swap
в пространстве имен std
. Поскольку вы using namespace std;
, эта функция swap
переносится в глобальное пространство имен и вызывается вместо нее.
Почему swap
выбран вместо *1013*? Ваша swap
функция принимает два long
с по значению; чтобы вызвать эту функцию, требуется целочисленное продвижение для каждого из аргументов int
.
std::swap
- это шаблон функции. Требуется две ссылки на T
, и когда этот шаблон функции создается с T = int
, оба аргумента являются точным совпадением. Таким образом, std::swap
лучше соответствует вашей функции и поэтому выбирается при разрешении перегрузки.
Это одна из причин, по которой using namespace std;
является злом, и его следует избегать. Если вы удалите директиву using, ваша функция будет единственной доступной и будет вызываться.