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.
decltype(auto)
auto
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.
return
decltype
auto returns by value, decltype maybe not.