"lvalue" does not mean "goes on left of the assignment operator" and "rvalue" does not mean "goes on right of the assignment operator". C++ uses a more nuanced definition.
The terms "lvalue" and "rvalue" are classes of expressions, not types. Therefore one major conceptual problem with this question is that a type does not have a value category at all.