What is the difference between auto and decltype(auto) when returning from a function?
auto
follows the template argument deduction rules and is always an object type; decltype(auto)
follows the decltype
rules for deducing reference types based on value categories. So if we have
int x;
int && f();
then
expression auto decltype(auto)
----------------------------------------
10 int int
x int int
(x) int int &
f() int int &&
auto
returns what value-type would be deduced of you assigned the return
clause to an auto
variable. decltype(auto)
returns what type you would get if you wrapped the return clause in decltype
.
auto
returns by value, decltype
maybe not.