http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58924
Bug ID: 58924
Summary: Non-member invocation of overload of operator<< when
the first argument is a temporary of type
std::stringstream
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sir_nawaz959 at yahoo dot com
I'm using GCC-4.8.1 in C++11 Mode.
Consider this code,
#include <sstream>
#include <iostream>
int main()
{
auto s = static_cast<std::stringstream&>(std::stringstream() << "XYZ" <<
"ABC").str();
std::cout << s << std::endl;
}
Actual (incorrect) output:
XYZABC
The expected output is an address following by ABC, something like this:
0x400e83ABC
Because `std::stringstream()` is a temporary, so the first invocation of
`operator<<` must resolve to a member function (taking void* as argument) which
would print the address, and then the non-member function should be invoked for
the second `<<`.
Note that this works as expected when I don't use `-std=C++11` (of course, in
that case I use `std::string` instead of `auto`).