Search code examples
c++copy-constructorostringstream

Problem with ostringstream and copy constructor


Possible Duplicates:
Why copying stringstream is not allowed?
how copy from one stringstream object to another in C++?

Compiling class T fails with Visual C++ and GCC producing iostreams template errors. Here is the code:

#include <sstream>

class T
{
  static T copy;

  std::ostringstream log;

  T()            {}
  T(const T& t)  {log  = t.log;}
  ~T()           {copy = *this;}
};

T T::copy;

Changing log data member type to string makes it compile and run OK. Is this a legitimate behavior?


Solution

  • Copy constructor and copy-assignment of any stream class in C++ has been made private. That means, you cannot make copy of std::ostringstream object:

    std::ostringstream ss;
    
    std::ostringstream ss1(ss); //not allowed - copy-constructor is private
    ss1=ss; //not allowed - copy-assignment is private