Easy Bit IO. Very simple interface works up to N == 64
The code is relatively short and well-written, so I didn't find many nits to pick.  With that said, here's my review:

Include all needed files

Since std::ostream_iterator is declared in &lt;iterator&gt; that should be among the includes in main:

#include &lt;iterator&gt;


Use appropriate type for template parameter

The std::bitset template is defined as taking std::size_t rather than int, so it would make sense to define the BitIO template similarly:

template&lt;std::size_t S&gt;
class BitIO
{
    // ...
};


One can, of course, still abuse the interface by passing negative numbers but at least the user of the code is forewarned that they will be interpreted as std::size_t rather than as signed numbers.

Consider implementing a move constructor

At the moment, this potential usage cannot compile:

std::cout &lt;&lt; BitIO&lt;16&gt;(std::bitset&lt;16&gt;{ 99 });


It's easily fixed by adding this constructor:

BitIO(std::bitset&lt;S&gt;&amp;&amp; data)
    : data(data)
{}


Maintain parallelism with existing practice

I was surprised to see spaces separating the outputs when none had been specified in the output ostream_iterator.  Although having the space is arguably useful, the choice of separator (if any) should be left up to the user of the template instead of being hardcoded in the operator &lt;&lt; function.  I'd omit the trailing space to allow usage like this:

std::copy(std::begin(values), std::end(values), 
        std::ostream_iterator&lt;BitIO&lt;16&gt;&gt;(std::cout,":"));