max
не является встроенной функцией, она является частью стандартной библиотеки. Вы не пытаетесь переопределить / заменить его, вы просто добавляете другую перегрузку функции, которая будет учитываться при разрешении перегрузки и сделает вызов неоднозначным, потому что и ваша перегрузка, и ваша стандартная библиотека, которую вы импортировали с помощью using namespace std;
, будут match.
Ваша проблема в том, что вы используете using namespace std;
, который импортирует все имена из стандартного пространства имен библиотеки std::
в глобальное пространство имен.
This считается плохой практикой именно по той причине, что это вызовет такую проблему, как ваша.
Удалите using namespace std;
и вместо этого всегда либо префиксируйте имена из стандартного пространства имен библиотеки с помощью std::
, например std::cout
, либо импортировать только выбранный список имен, например:
using std::cout;
Однако нет смысла определять max
самостоятельно. std::max
из #include<algorithm>
уже делает именно то, что вы хотите max
(только для того, чтобы позаботиться о некоторых крайних случаях, которые вы не рассматриваете).
Просто используйте std::max
(или * 1027) * после using std::max;
) и не определяйте свою собственную реализацию.