How different kinds of expressions are categorized in C++

lvalue

A variable

lvalue reference

A variable reference e.g. a function expression that returns a reference, a reference to an lvalue Can be assigned to

rvalue

Temporaries e.g. a literal, an concatenated expression, a function expression that returns an rvalue Cannot be assigned to Cannot be referenced (&), unless const referenced

rvalue reference

denoted by && you would probably just see this as a function parameter, to select for only rvalues