#include <iostream>
#include <fstream>
using namespace std;

class MyFileBuf : public std::filebuf
{
protected:
    virtual int_type sync()
    {
        // breakpoint here never fires
std::cout << "sync" << std::endl;
        return std::filebuf::sync();
    };

    virtual std::streamsize xsputn( const char_type* p, std::streamsize n )
    {
        // breakpoint here never fires
std::cout << "xsputn" << std::endl;
        return std::filebuf::xsputn( p, n );
    };

    virtual int_type overflow( int_type c = traits_type::eof() )
    {
        // breakpoint here never fires
std::cout << "overflow" << std::endl;
        return std::filebuf::overflow( c );
    };
};

class MyFileStream : public std::ostream
{
public:
    MyFileStream() : std::ostream( 0 ) { init( &buf_ ); };
    MyFileStream( const char* filename, std::ios_base::openmode mode = std::ios_base::out )
        : std::ostream( 0 )
    {
        init( &buf_ );
        this->open( filename, mode );
    }

    bool is_open() const { return buf_.is_open(); };

    void close() { buf_.close(); };
    
    void open( const char* filename, std::ios_base::openmode mode = std::ios_base::out )
    {
        buf_.open( filename, mode );
    };

    std::filebuf* rdbuf() { return &buf_; };

private:
    MyFileBuf buf_;
};

int main()
{
    MyFileStream fs( "test.txt" );
    fs << "this is a test" << std::endl;
    return 0;
}
