In the case of the approximate() function template:
#include <math.h> template <class T> int approximate (T first, T second) { double aptemp=double(first)/double(second); return int(abs(aptemp-1.0) <= .05); };
if the two input values are of different types, overloading
resolution does not take place:
float a=3.24; double b=3.35; if (approximate(a,b)) // error, different types { /* ... */ }
The solution is to force a conversion to one of the available function
types by explicitly declaring the function for the chosen type. To resolve
the float/double example, include the following function declaration:
int approximate(double a, double b); // force conversion of the float to double
This declaration creates a function approximate() that expects two
arguments of type double, so that when approximate(a,b) is called
, the overloading is resolved by converting variable a to type double.