fork download
  1. #include <ctime>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <iomanip>
  6. #include <utility>
  7.  
  8. struct make_string
  9. {
  10. make_string & operator<<(std::ostream& (*manip)(std::ostream&))
  11. {
  12. manip(ostr);
  13. return *this;
  14. }
  15.  
  16. template <typename T> make_string & operator<<(const T & t)
  17. {
  18. ostr << t;
  19. return *this;
  20. }
  21.  
  22. operator std::string() const { return ostr.str(); }
  23.  
  24. std::string str() const { return ostr.str(); }
  25.  
  26. std::ostringstream ostr;
  27. };
  28.  
  29.  
  30. void message(const std::string&) {}
  31.  
  32. int main()
  33. {
  34. message(make_string() << "1 + 1 = " << 2 << "\n"); // OK
  35. message(make_string() << "1 + 1 = " << 2 << std::endl); // Not OK
  36.  
  37.  
  38. // OK
  39. std::ostringstream os;
  40. os << std::endl;
  41.  
  42. // Not ok.
  43. make_string mk;
  44. mk << std::endl;
  45. }
Success #stdin #stdout 0s 3064KB
stdin
Standard input is empty
stdout
Standard output is empty