////
Copyright 2019 Glen Joseph Fernandes
(glenjofe@gmail.com)

Distributed under the Boost Software License, Version 1.0.
(http://www.boost.org/LICENSE_1_0.txt)
////

# Insert Formatted Output, <boost/io/ostream_put.hpp>
:toc:
:toc-title:
:idprefix:

## Description

The header `<boost/io/ostream_put.hpp>` provides the function template
`boost::io::ostream_put` for formatted output that satisfies the requirements
of [ostream.formatted.reqmts].

## Example

The inserter for class template `basic_string_view` could be implemented as
follows:

```
template<class charT, class traits>
std::basic_ostream<charT, traits>&
operator<<(std::basic_ostream<charT, traits>& os,
    const basic_string_view<charT, traits>& str)
{
    return boost::io::ostream_put(os, str.data(), str.size());
}
```

## Reference

### Header Synopsis

```
namespace boost {
namespace io {

template<class charT, class traits>
std::basic_ostream<charT, traits>&
ostream_put(std::basic_ostream<charT, traits>& os,
    const charT* data, std::size_t size);

} // io
} // boost
```

### Free functions

```
template<class charT, class traits>
std::basic_ostream<charT, traits>&
ostream_put(std::basic_ostream<charT, traits>& os,
    const charT* data, std::size_t size);
```

[.specification]
Effects:: Behaves like a formatted inserter (as described in
[ostream.formatted.reqmts]) of `os`. Creates a character sequence `seq` of size
characters starting at `data`, each widened using `os.widen()`
([basic.ios.members]). Determines padding for `seq` as described in
[ostream.formatted.reqmts]. Inserts `seq` into `os`. Calls `width(0)`.
Returns:: `os`.

## Acknowledgments

Glen Fernandes updated the implementation of the `basic_string_ref` and
`basic_string_view` stream insertion operators to write directly to the
`basic_streambuf` and refactored that functionality into this common utility.
