RGW: make SSTR macro safe against variable name collisions
The original SSTR macro defined a local variable `std::stringstream ss`
inside its expansion. When an expression that used a variable named `ss`
is passed to this macro, it led to name shadowing and unexpected results.
Example:
std::stringstream ss;
ss << "aaa";
auto result = SSTR("this is ss=" << ss.str());
Actual result:
"this is ss=this is ss="
Expected result:
"this is ss=aaa"
This change rewrites the macro to construct an unnamed temporary to
avoid any name collision.