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