Знание того, что lvalue и rvalue помогут при расшифровке предупреждений компилятора. Lvalue - это то, что будет назначено, а rvalue - это то, что может сделать назначение. Больше информации в Википедии
Значение r также может быть значением l, как в случае a = b = c (где c - значение l для значения b, но тогда b - значение l для значения a).
каждый раз, когда вы видите «lvalue required», смотрите слева от оператора =, там есть ошибка.