I’m playing around with boost::iostreams and the user guide talks about filter “counter”. So I try it with this code:
#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/device/null.hpp>
#include <boost/iostreams/filter/counter.hpp>
namespace io = boost::iostreams;
int main()
{
io::counter cnt;
io::filtering_ostream out(cnt | io::null_sink());
out << "hello";
std::cout << cnt.lines() << " " << cnt.characters() << std::endl;
}
It always gives
0 0
which doesn’t seem to be what I am expecting.
A preliminary tracing with gdb suggests the counter object that is doing the counting has a different address with object ‘cnt’. I suppose it is some kind of copying in pipeline? If that’s the case, how can filter “counter” be of any use?
Looking at the documentation you can use either:
or: