I have created a simple function with 2 diffrernt template arguments t1, t2 and return type t3.
So far no compilation error. But when Itry to call the function from main, I encounter error C2783.
I needed to know If the following code is legally ok? If not how is it fixed?
please help!
template <typename t1, typename t2, typename t3>
t3 adder1 (t1 a , t2 b)
{
return int(a + b);
};
int main()
{
int sum = adder1(1,6.0); // error C2783 could not deduce template argument for t3
return 0;
}
There is no way for the compiler to deduce
t3from the function arguments. You need to pass this argument explicitly. Change the order of the parameters to make this possibleThen you can call it with
adder1<int>(1, 6.0). It’s more difficult if you want to deducet3to the actual result of the addition. C++0x (next C++ version’s codename) will allow to do this by saying that the return type is equal to the type of the addition the following wayThen you could cast explictly at the point of use
Simulate this in the current C++ version isn’t going to be easy. You can use my promote template to do that. If you feel that this rather confuses the matter for you and that you are OK with explictly providing the return type, i think it’s better to stay with explicitly providing it. Like Herb Sutter says “Write What You Know, and Know What You Write”
Nontheless you can do the above like this with that template