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:
There are three ways to handle such an error:
Cast the arguments so that they both match:
Specify (or qualify) explicitly the type of T:
Specify that the parameters may have different types.
For a detailed discussion of these topics, see the next section.