我读过这些SO帖子[1,2]以及this一个,但很惊讶地得到以下结果:
首先订购:
template<typename T> // template (a)
void f(T);
template<typename T> // template (b)
f(T*);
template<> // template (c)
f<>(int*);
// ...
int *p; f<int*>(p); // calls (a)
第二次订购:
template<typename T> // template (a)
void f(T);
template<> // template (c)
f<>(int*);
template<typename T> // template (b)
f(T*);
// ...
int *p; f<int*>(p); // calls (c)
为什么在第一次排序(而不是模板(c))中选择了模板(a)?