March 23, 2011, 4:48 a.m.
posted by jackexe
When we call a function template such as max() for some arguments, the template parameters are determined by the arguments we pass. If we pass two ints to the parameter types T const&, the C++ compiler must conclude that T must be int. Note that no automatic type conversion is allowed here. Each T must match exactly. For example:
template <typename T> inline T const& max (T const& a, T const& b); … max(4,7) // OK: T is int for both arguments max(4,4.2) // ERROR: first T is int, second T is double
There are three ways to handle such an error:
Cast the arguments so that they both match:
max(static_cast<double>(4),4.2) // OK
Specify (or qualify) explicitly the type of T:
max<double>(4,4.2) // OK
Specify that the parameters may have different types.
For a detailed discussion of these topics, see the next section.