fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct If { If(bool active) : active_(active) { } bool active_; };
  5. struct Else { } _else;
  6. struct Endif { } _endif;
  7.  
  8. class xstream
  9. {
  10. public:
  11. xstream(std::ostream& os) : os_(os) { }
  12.  
  13. template <typename T>
  14. friend xstream& operator<<(xstream& s, const T& t)
  15. {
  16. if (s.active_) s.os_ << t;
  17. return s;
  18. }
  19.  
  20. private:
  21. bool active_;
  22. std::ostream& os_;
  23. };
  24.  
  25. template <>
  26. xstream& operator<< <If>(xstream& s, const If& _if)
  27. {
  28. s.active_ = _if.active_;
  29. return s;
  30. }
  31.  
  32. template <>
  33. xstream& operator<<<Else>(xstream& s, const Else& _else)
  34. {
  35. s.active_ ^= true;
  36. return s;
  37. }
  38.  
  39. template <>
  40. xstream& operator<<<Endif>(xstream& s, const Endif& _endif)
  41. {
  42. s.active_ = true;
  43. return s;
  44. }
  45.  
  46.  
  47. int main(int argc, const char* argv[])
  48. {
  49. xstream xs(std::cout);
  50. xs << If(argc <= 1) << argc - 1 << _else << "none" << _endif << '\n';
  51. }
Success #stdin #stdout 0s 3344KB
stdin
Standard input is empty
stdout
0