L-value - идентифицируемое место в памяти (т.е. имеет адрес). R-value - определяет исключительным путем, т.е. это не L-value. Каждое выражение либо L-value, либо R-value. Так что R-value это выражение которое не представляет объект занимающий некоторое идентифицируемое место в памяти.
// Оператор присваивания (assignment) предполагает L-value в качестве левого операнда.
int i = 10; // i имеет адрес в памяти и поэтому это L-value.
int i;
10 = i; // 10 не имеет идентифицируемого местонахождения в памяти и поэтому это R-value, нет смысла присваивать i десяти.
std::move
просто cast'ит объект к T&&
, с объектом ничего не случается.
По старой доброй традиции C++ remove
не изымает, delete
не стирает, а move
не перемещает :)