std::ostringstream печатает адрес c-строки вместо ее содержимого

Я наткнулся на странное поведение, которое сначала просто не мог объяснить (см. ideone):

#include 
#include 
#include 

int main() {
  std::cout << "Reference     : "
            << (void const*)"some data"
            << "\n";

  std::ostringstream s;
  s << "some data";
  std::cout << "Regular Syntax: " << s.str() << "\n";

  std::ostringstream s2;
  std::cout << "Semi inline   : "
            << static_cast(s2 << "some data").str()
            << "\n";

  std::cout << "Inline        : "
            << dynamic_cast(
                 std::ostringstream() << "some data"
               ).str()
            << "\n";
}

Получает вывод:

Reference     : 0x804a03d
Regular Syntax: some data
Semi inline   : some data
Inline        : 0x804a03d

Удивительно, но в последнем броске мы имеем адрес, а не содержимое!

Почему так?

19
задан Matthieu M. 27 November 2011 в 16:48
поделиться