What is the difference between auto and decltype(auto) when returning from a function?

StackOverflow https://stackoverflow.com/questions/21369113

  •  03-10-2022
  •  | 
  •  

Question

I rarely see decltype(auto) but when I do it confuses me because it seems to do the same thing as auto when returning from a function.

auto g() { return expr; }
decltype(auto) g() { return expr; }

What is the difference between these two syntaxes?

Was it helpful?

Solution

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 &&

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top