lvalue - это термин, данный выражению, которое относится к объекту, то есть к чему-либо с адресом.
Исторически это происходит из-за того, что это то, что действительно может появиться слева от назначения. Напротив, известно, что что-то, что может появиться справа от назначения, было rvalue , однако rvalue фактически относится к любому выражению, которое не является lvalue .
Обычно вы можете конвертировать lvalues в rvalues (объекты имеют значение), но не наоборот.
Обычно ошибка, которую вы получаете, означает, что вы пытаетесь что-то сделать с rvalue , который действителен только для lvalues .
Это может быть присвоение результата функции или получение адреса литерала.
f() = 5;
int *p = &5;