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.

Tags:

C++

C++11