Trailing return type

In computer programming, a subroutine (a.k.a. function) will often inform calling code about the result of its computation, by returning a value to that calling code. The data type of that value is called the function's return type.

In the C++ programming language, a function must be declared. The C++ function's return type is specified as a part of declaring that function. A trailing return type, a syntax feature available since C++11, is like a traditional return type, except that it is specified in a different location.

Syntax
An ordinary return type is specified before the function's name. In this example of traditional C++ code, the return type of  is  : A trailing return type is specified after the parameter list, following  symbols:

Distinction from other language features
In modern C++, the meaning of the  keyword will depend on its context:
 * When used in a variable's definition (e.g., ), the   keyword indicates type inference. The data type for that   will be deduced from its initialization. The return type of a function can also be inferred by using   without specifying a trailing return type (e.g. )
 * On the other hand, there is no type inference in the  example on the previous section. That example only uses the   keyword as a syntactic element, because a trailing return type is being used.

Rationale
Consider the task of programming a generic version of. A proper expression of this function's return type would use the two formal parameter names with decltype:. But, where a return type is traditionally specified, those two formal parameters are not yet in scope. Consequently, this code will not compile: The formal parameters are in scope, where a trailing return type is specified: