如果两个模板函数都匹配参数列表,C++ 将调用哪个模板

C++ which template would be call if both template function match the argument list

template<class T>
void fn(T t){}

template<class T>
void fn(std::vector<T> vt){}

void f() {
std::vector<int> vt;
fn(vt);
}

知道会调用第二个模板函数,不知道模板函数匹配规则

Partial ordering 发生在调用函数模板特化的重载决策中。

Informally "A is more specialized than B" means "A accepts fewer types than B".

对于这种情况,第二个 fn 更专业并且在重载决策中获胜,因为它接受 std::vector 的实例化类型少于第一个,它可以接受所有类型。