#include<vector>
#include<iterator>
#include<iostream>


template<typename T> class ostream_iterator: 
public std::iterator <std::output_iterator_tag, T >  {
  class writing_proxy {
    std::ostream &_out; 
  public:
    writing_proxy(std::ostream &out) :_out(out) {};
    
    void operator=(const T &val) {
      _out<<val;
    } 
  };

  std::string _sep;
  std::ostream &_out;
  writing_proxy  _proxy;
public:
  ostream_iterator(std::ostream &out,std::string sep):
    _out(out),_sep(sep),_proxy(_out){};
  void operator++()    {_out<<_sep;}
  void operator++(int) {_out<<_sep;}
  writing_proxy &operator*() {return _proxy;};
};

main() {
ostream_iterator<int> io(std::cout,"\n");
 *io=44;++io;
}