在“C++ 模板 - 完整指南”一书的部分2.4 Overloading Function Templates
中,您将找到以下示例:
// maximum of two int values
inline int const& max (int const& a, int const& b)
{
return a < b ? b : a;
}
// maximum of two values of any type
template <typename T>
inline T const& max (T const& a, T const& b)
{
return a < b ? b : a;
}
// maximum of three values of any type
template <typename T>
inline T const& max (T const& a, T const& b, T const& c)
{
return max (max(a,b), c);
}
int main()
{
::max(7, 42); // calls the nontemplate for two ints (1)
}
然而,在附录 B 的 B.2 简化重载解决方案中,作者指出:
请注意,重载决议发生在模板参数推导之后,... (2)
根据(2)
,::max(7,42)
应该max<int>
通过参数推导调用。