template<class T>
void fn(T t){}
template<class T>
void fn(std::vector<T> vt){}
void f() {
std::vector<int> vt;
fn(vt);
}
我知道第二个模板函数会被调用,但我不知道模板函数匹配的规则。
部分排序 发生在对函数模板专业化调用的过载解析中。
非正式的 "A比B更专业化 "意味着 "A接受的类型比B少"。
对于这种情况,第2 fn
更加专业化,并且在过载解决中胜出,因为它接受的是 std::vector
比第1种少,它可以接受所有类型。