namespace std {
  template<class charT, class traits = char_traits<charT>>
  class ostreambuf_iterator {
  public:
    using iterator_category = output_iterator_tag;
    using value_type        = void;
    using difference_type   = void;
    using pointer           = void;
    using reference         = void;
    using char_type         = charT;
    using traits_type       = traits;
    using streambuf_type    = basic_streambuf<charT,traits>;
    using ostream_type      = basic_ostream<charT,traits>;
    ostreambuf_iterator(ostream_type& s) noexcept;
    ostreambuf_iterator(streambuf_type* s) noexcept;
    ostreambuf_iterator& operator=(charT c);
    ostreambuf_iterator& operator*();
    ostreambuf_iterator& operator++();
    ostreambuf_iterator& operator++(int);
    bool failed() const noexcept;
  private:
    streambuf_type* sbuf_;                  };
}The
class template
ostreambuf_iterator
writes successive
characters
onto the output stream from which it was constructed
.It is not possible to get a character value out of the output iterator
.
ostreambuf_iterator(ostream_type& s) noexcept;
 Requires: 
s.rdbuf()
shall not be a null pointer
. Effects: 
Initializes 
sbuf_ with 
s.rdbuf(). 
ostreambuf_iterator(streambuf_type* s) noexcept;
 Requires: 
s
shall not be a null pointer
. Effects: 
Initializes 
sbuf_ with 
s. ostreambuf_iterator& operator=(charT c);
Effects: 
If
failed()
yields
false,
calls
sbuf_->sputc(c);
otherwise has no effect
. ostreambuf_iterator& operator*();
ostreambuf_iterator& operator++();
ostreambuf_iterator& operator++(int);
bool failed() const noexcept;
Returns: 
true
if in any prior use of member
operator=,
the call to
sbuf_->sputc()
returned
traits::eof();
or
false
otherwise
.