I have implemented a stream that sends output to the debugger (using OutputDebugString() in Windows):

class debug_output_sink : public boost::iostreams::sink {
public:
  debug_output_sink(int) { }
  std::streamsize write(const char* s, std::streamsize n);
  // also tried with:
  // struct category : boost::iostreams::sink::category, boost::iostreams::flushable_tag { };
  // bool flush() { return true; }
};

When I use it directly, flush() works fine:

    stream_buffer<debug_output_sink> debug_streambuf(debug_sink);
    ostream debug_stream(&debug_streambuf);
    debug_stream << "test\n";
    debug_stream.flush(); // characters appear immediately


However, when I put it in a filter, flushing the filter doesn't flush the stream:


  // scope
  {
    stream_buffer<debug_output_sink> debug_streambuf(debug_sink);
    ostream debug_stream(&debug_streambuf);
   
    filtering_ostreambuf filtering_buf;
    filtering_buf.push(debug_stream);
   
    ostream os(&filtering_buf);
    os << "test";
    os.flush(); // nothing
    filtering_buf.pubsync(); // nothing either
    filtering_buf.strict_sync(); // still nothing
  }
  // characters appear at last !

What I am missing here?

Thanks,
Jean-Louis Leroy