Historically, lvalues and rvalues were so-called
because they could appear on the left- and right-hand side of an assignment
(although this is no longer generally true);
glvalues are “generalized” lvalues,
prvalues are “pure” rvalues,
and xvalues are “eXpiring” lvalues.

a .* pointer-to-member expression in which the first operand is
an xvalue and the second operand is a pointer to data member ([expr.mptr.oper]).

In general, the effect of this rule is that named rvalue references are
treated as lvalues and unnamed rvalue references to objects are treated as
xvalues; rvalue references to functions are treated as lvalues whether named or not.

Because cv-qualifiers are removed from the type of an expression of
non-class type when the expression is converted to a prvalue, an lvalue
of type const int can, for example, be used where
a prvalue of type int is required.

Unless otherwise indicated ([dcl.type.simple]),
a prvalue shall always have complete type or the void type;
if it has a class type or (possibly multi-dimensional) array of class type,
that class shall not be an abstract class ([class.abstract]).

an aggregate or union type that includes one of the aforementioned types among its
elements or non-static data members (including, recursively, an element or non-static data member of a
subaggregate or contained union),

if T1 is “pointer to cv1C1” and T2 is “pointer to
cv2C2”, where C1 is reference-related to C2 or C2 is
reference-related to C1, the cv-combined type
of T1 and T2 or the cv-combined type of T2 and T1,
respectively;

if T1 is “pointer to member of C1 of type cv1U1” and T2 is
“pointer to member of C2 of type cv2U2” where C1 is
reference-related to C2 or C2 is reference-related to
C1, the cv-combined type of T2 and T1 or the cv-combined type
of T1 and T2, respectively;