I see `decltype(x)` used inside macros where `x` is a variable name because the type of the object isn't known inside macros.

For example:

```
decltype(x) y = expr;

```

I could just have easily use `auto` instead of `decltype`. So what are those situations where `decltype` is needed for a variable type declaration instead of `auto`?