「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>