// usage: makestr(something << "something_else" << 123)
#define makestr(args) (reinterpret_cast<std::stringstream&>(std::stringstream() << args)).str()
//test case:
std::cerr << makestr("A" << 2 << "B") << std::endl;
#0 0xb7fa4e07 in std::string::_Rep::_M_grab(std::allocator<char> const&, std::allocator<char> const&) ()
from //usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5
#1 0xb7fa4ed8 in std::string::string(std::string const&) ()
from //usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/libstdc++.so.5
#2 0x0804b3e1 in std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const (this=0xbfffeee0) at sstream:148
#3 0x0804a986 in main () at sstream:617
For that same test case dynamic and static casts yielded the random number (in my case 0x804bfd32B). Any help greatly appreciated..