fork download
  1. #include <iostream>
  2. #include <sstream>
  3. #include <iomanip>
  4.  
  5. struct MyStream
  6. {
  7. mutable std::ostringstream ss;
  8.  
  9. MyStream() {}
  10. MyStream(std::ostringstream & oss) { ss << oss.str(); }
  11. };
  12.  
  13. typedef std::ostream & (*manipulator_t) (std::ostream &);
  14.  
  15. const MyStream & operator << (const MyStream & s, manipulator_t m)
  16. {
  17. s.ss << m;
  18. return s;
  19. }
  20.  
  21. template <class T>
  22. const MyStream & operator << (const MyStream & s, T v)
  23. {
  24. s.ss << v;
  25. return s;
  26. }
  27.  
  28. void MyPrint(const MyStream & s)
  29. {
  30. std::cout << "logged: " << s.ss.str();
  31. }
  32.  
  33. int main()
  34. {
  35. MyPrint(MyStream() << "true && false == " << std::boolalpha << (true && false) << std::endl);
  36.  
  37. std::ostringstream oss;
  38. oss << std::setw(22) << "Hello, World!" << std::endl;
  39. MyPrint(oss);
  40. }
Success #stdin #stdout 0s 2868KB
stdin
Standard input is empty
stdout
logged: true && false == false
logged:          Hello, World!