Вызов метода ostringstream::str()
создает новый строковый объект, поэтому вы используете итераторы из двух разных объектов.
Для решения проблемы сохраните строку во временной переменной:
string temp = stream.str();
cout << string(temp.rbegin(), temp.rend()) << endl;
Что вы и делали с переменной st
.