error C2668: “min”: 对重载函数的调用不明确,不能重载模板吗?解决方案

error C2668: “min”: 对重载函数的调用不明确,不能重载模板吗?
#include   <iostream>
using   namespace   std;

template <typename   T>
T   min(T   a,   T   b)
{
return   a> b?   a   :   b;
}

int   main()
{
cout < <min(4,   6);
}

------解决方案--------------------
不改名字也很,自己写个namespace就好了:

#include <iostream>
using namespace std;

namespace tt {
template <typename T> T min(T a, T b) {
return a> b ? a : b;
}
}
int main() {
cout < <tt::min(4, 6); // 不过你这个是求最大值,功能与函数名字不符合.
}

------解决方案--------------------
按你所说的“默认的名字空间”应该是全局名字空间,他没有名字。而不同的库会引入不同的名字空间,这是为了解决全局名字空间污染。至于名字空间的优先级,没有听说过这种说法.
------解决方案--------------------

使用了using namaspace std 后,你所调用的函数,回到std名空间去查找了。
如果你使用了在std名空间定义的函数,而同时又定义了自己的同名函数,就可能出现重载或者冲突,
------解决方案--------------------
你这不是重载
你的:
template <typename T>
T min(T a, T b)
std的:
template <class T>
const T& min(const T&,const T&);
没有构成任何一个重载条件,相反会产生歧义的编译错误.我想你的本意是模版的偏特化.

但是,例如你这样实例化min <int> (1,2),你认为他应该匹配哪个呢?1你可以说是一个int也可以说是一个int&.
显然这两个都是最佳匹配,编译器无法确定.