ما در فضای نام std تابعی به اسم min هم داریم
داخل کد بالا شما تابع با همین اسم رو دوباره تعریف کردید
چون از using namespace std ; استفاده کردید تمام فضای نام std از داخل main قابل دسترس میشه .
وقتی که بنویسید min(17,3 کامپایلر نمیتونه تشخیص بده از min که تعریف شده استفاده کنه یا از min داخل std
اون :: برای این هستش که اسم از فضای نام global خونده بشه
#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
T min(T a, T b)
{
return a<b ? a : b;
}
int main()
{
min(1,2);//error ambiguous call
::min(1,2);//ok inja func min ke sakhtim call mishe
std::min(1,2);//ok inja func min az fazaye name std call mishe
}