C++14 is a version of the standard for the programming language C++. It is intended to be a small extension over C++11, featuring mainly bug fixes and small improvements. Its approval was announced on August 18, 2014. C++14 was released on December 15, 2014.
Because earlier C++ standard revisions were noticeably late, the name "C++1y" was sometimes used instead until its approval, similarly to how the C++11 standard used to be termed "C++0x" with the expectation of its release before 2010 (although in fact it slipped into 2010 and finally 2011).
These are the features added to the core language of C++14.
C++11 allowed lambda functions to deduce the return type based on the type of the expression given to the return statement. C++14 provides this ability to all functions. It also extends these facilities to lambda functions, allowing return type deduction for functions that are not of the form return expression;
.
In order to induce return type deduction, the function must be declared with auto
as the return type, but without the trailing return type specifier in C++11:
If multiple return expressions are used in the function's implementation, then they must all deduce the same type.
Functions that deduce their return types can be forward declared, but they cannot be used until they have been defined. Their definitions must be available to the translation unit that uses them.
Recursion can be used with a function of this type, but the recursive call must happen after at least one return statement in the definition of the function:
In C++11, two methods of type deduction were added. auto
was a way to create a variable of the appropriate type, based on a given expression. decltype
was a way to compute the type of a given expression. However, the way decltype
and auto
deduce types are different. In particular, auto
always deduces a non-reference type, as though by using std::decay
, while auto&&
always deduces a reference type. However, decltype
can be prodded into deducing a reference or non-reference type, based on the value category of the expression and the nature of the expression it is deducing:
C++14 adds the decltype(auto)
syntax. This allows auto
declarations to use the decltype
rules on the given expression.
The decltype(auto)
syntax can also be used with return type deduction, by using decltype(auto)
syntax instead of auto
for the function's return type deduction.