Из последних стандартов C ++ ISO https://timsong -cpp.github.io / cppwp / expr # basic.lval-10
Значение lvalue можно изменить, если его тип неconst-qualified или является типом функции.[Примечание: программа, которая пытается изменить объект через немодифицируемое значение lvalue или через значение rvalue, неправильно сформирована
Но следующий код, который временно изменяет значение через rvalue, работает хорошо.
https://godbolt.org/z/L9H06i
#include <iostream>
struct A
{
std::string s1;
A():s1("123") {}
A&& modify() { s1 = "123411111111111111111111111111111111111111111111111111111111111111111111";
return std::move(*this);
} //modifying temporary object through rvalue!
};
void f(A&& o)
{
std::cout << o.s1.c_str();
}
int main()
{
f(A().modify());//modifying temporary object through rvalue!
return 0;
}