I’ve a problem on this code:
template <typename T>
void dosth(T& value,const T& default_value)
{
if (condition)
value = 10;
else
value = default_value;
}
When I call that with
enum {
SITUATION1,
STIUATION2
};
int k;
dosth(k,SITUATION1);
the compiler (g++ 4.5) says
no matching function for call to ‘dosth(int&,)’
Why doesn’t the compiler automatically cast the enum into an int?
Your problem is due to the fact that the template cannot be instantiated from the function arguments that you supply. No implicit conversion to
intoccurs, because there’s no function to call at all.If you cast instead of attempting to rely on implicit conversion, your program will work:
Or, if you provide the function template’s arguments explicitly, then the function argument will be converted implicitly as you expect, and your program will work: