Если функция возвращает объект по значению, тогда присваивание возможно, даже если вызов функции является rvalue. Например:
std::string("hello") = "world";
Это создает временный строковый объект, изменяет его, а затем немедленно уничтожает. Более практичный пример:
some_function(++list.begin());
Вы не можете написать list.begin() + 1
, потому что на итераторах списка добавление невозможно, но приращение в порядке. Этот пример не включает присваивание, но присваивание является лишь частным случаем более общего правила «функции-члены могут вызываться по rvalues».