What is the meaning of auto when using C++ trailing return type?
Consider the code:
template<typename T1, typename T2>
Tx Add(T1 t1, T2 t2)
{
return t1+t2;
}
Here the return type depends on expression t1+t2
, which in turn depends on how Add
is called. If you call it as:
Add(1, 1.4);
T1
would be int
, and T2
would be double
. The resulting type is now double
(int+double). And hence Tx
should (must) be specified using auto
and ->
template<typename T1, typename T2>
auto Add(T1 t1, T2 t2) -> decltype(t1+t2)
{
return t1+t2;
}
You can read about it in my article.
In general, the new keyword auto
in C++11 indicates that the type of the expression (in this case the return type of a function) should be inferred from the result of the expression, in this case, what occurs after the ->
.
Without it, the function would have no type (thus not being a function), and the compiler would end up confused.