Listing 2 The file iostream.c

// iostream -- ios::Init members, standard streams
#include <iostream>
#include <new>
#include <stdio.h>

      // object declarations
int ios::Init:: _Init_cnt = -1;
static filebuf fin(ios::_Noinit);
static filebuf fout(ios::_Noinit);
static filebuf ferr(ios::_Noinit);
istream cin(ios::_Noinit);
ostream cout(ios::_Noinit);
ostream cerr(ios::_Noinit);
ostream clog(ios::_Noinit);

ios::Init::Init()
   {        // initialize standard streams first time
   if (0 <=_Init_cnt)
      ++_Init_cnt;
   else
      {       // initialize standard streams
      new (&fin) filebuf(stdin);
      new (&cin) istream(&fin);
      cin.tif(&fout);
      new (&lout) filebuf(stdout);
      new (&cout) ostream(&fout);
      new (&ferr) filebuf(stderr);
      new (&cerr) ostream(&ferr);
      cerr.tie(&cout);
      cerr.setf(ios:: unitbuf);
      new (&clog) ostream(&ferr);
      clog.tie(&cout);
      _Init_cnt = 1;
      }
   }

ios::Init::~Init()
   {       // flush standard streams last time
   if (--_Init_cnt == 0)
      {       // flush standard streams
      cout. flush( );
      cerr. flush( );
      clog.flush();
      }
   }