VMS Help
CXXLSTD, IOStreams

 *Conan The Librarian

  1 - iostream_intro

 Name
   iostream_intro - Introduction	to the HP C++ Standard	Library	iostream
   Package

   This page is an introduction to the ANSI I/O stream classes. If you
   would like information on the pre-ANSI I/O stream package, use the
   command:

        help cxxl

 Description

 Compatibility

   The ANSI Standard Library provides two macros that enable or
   disable use of the ANSI iostream package at compile
   time.  The ANSI  iostream package may cause compile time and/or
   run time behavior incompatibilities that require source
   code changes to resolve.   These macros allow users to choose the
   iostream package they want.

   Check	the C++ documentation for a description of the default
   settings of these macros in different compiler modes.

   The -D HP C++ compiler switch can be	used on	the compile
   command line without requiring source code	changes	while the
   #define line should be added	to the source code prior to any	#include
   statement.

   All source modules within the	same application must be compiled in
   the same mode.

   ________________________________________________________________
 		       __USE_STD_IOSTREAM
 	      Usage		  Description
   ________________________________________________________________
   cxx -D__USE_STD_IOSTREAM	  Use ANSI iostream package
   #define __USE_STD_IOSTREAM	  Use ANSI iostream package
   ________________________________________________________________
 		      __NO_USE_STD_IOSTREAM
 	      Usage		  Description
   ________________________________________________________________
   cxx -D__NO_USE_STD_IOSTREAM	  Use pre-ANSI iostream	package
   #define __NO_USE_STD_IOSTREAM	  Use pre-ANSI iostream	package
   ________________________________________________________________

 See Also
   basic_iostream

  2 - basic_filebuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_filebuf,filebuf

   This page describes the ANSI basic_filebuf class.  If	you would like
   information on the	pre-ANSI filebuf class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_filebuf
   : public basic_streambuf<charT, traits>

 DESCRIPTION

   The template class basic_filebuf is derived from basic_streambuf.  It
   associates the input or output sequence with a file. Each	object
   of type basic_filebuf<charT, traits> controls	two character sequences:

   +	  a character input sequence

   +	  a character output sequence

   The restrictions on reading  and writing a sequence controlled by an
   object of class basic_filebuf<charT,traits> are the same as for
   reading  and writing with the Standard	C library files.

   If the file is not  open for reading the input	sequence
   cannot	be read.  If the file is not open for writing the
   output sequence cannot be  written.  A joint	file position is
   maintained for	both the input  and output sequences.

   A file provides byte sequences. So the basic_filebuf	class treats a
   file as the external source (or sink) byte	sequence. In order to
   provide the contents of a	file as	wide character sequences, a
   wide-oriented file buffer called wfilebuf converts wide
   character sequences to multibytes character sequences (and vice
   versa) according to the current locale being used	in  the stream
   buffer.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_filebuf
   : public basic_streambuf<charT, traits> {

   public:

    typedef traits			traits_type;
    typedef charT			char_type;
    typedef typename traits::int_type	int_type;
    typedef typename traits::pos_type	pos_type;
    typedef typename traits::off_type	off_type;

    basic_filebuf();
    basic_filebuf(int fd);

    virtual ~basic_filebuf();

    bool	is_open() const;

    basic_filebuf<charT,	traits>* open(const char *s,
 				      ios_base::openmode,
 				      long protection =	0666);

    basic_filebuf<charT,	traits>* open(int fd);

    basic_filebuf<charT,	traits>* close();

   protected:

    virtual int	    showmanyc();

    virtual int_type overflow(int_type c	= traits::eof());

    virtual int_type pbackfail(int_type c = traits::eof());

    virtual int_type underflow();

    virtual basic_streambuf<charT,traits>*
      setbuf(char_type *s,streamsize n);

    virtual pos_type seekoff(off_type off,
 			    ios_base::seekdir way,
 			    ios_base::openmode which =
 			    ios_base::in | ios_base::out);

    virtual pos_type seekpos(pos_type sp,
 			    ios_base::openmode which =
 			    ios_base::in | ios_base::out);

    virtual int sync();

    virtual streamsize xsputn(const char_type* s, streamsize n);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   filebuf
      The type filebuf is an instantiation of class basic_filebuf on type
      char:

        typedef basic_filebuf<char> filebuf;

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wfilebuf
      The type wfilebuf is an instantiation of class basic_filebuf on type
      wchar_t:

        typedef basic_filebuf<wchar_t> wfilebuf;

 CONSTRUCTORS

   basic_filebuf();
      Constructs	an object of class basic_filebuf<charT,traits>,
      initializing the base class with basic_streambuf<charT,traits>().

   basic_filebuf(int fd);
      Constructs	an object of class basic_filebuf<charT,traits>,
      initializing the base class with basic_streambuf<charT,traits>(),
      then calls open(fd). This function is	not described in the
      C++ standard, and is provided as an extension in order to
      manipulate pipes, sockets  or other UNIX devices, that
      can be accessed	through	file  descriptors.

 DESTRUCTOR

   virtual ~basic_filebuf();
      Calls close() and destroys	the object.

 MEMBER FUNCTIONS

   basic_filebuf<charT,traits>*
   close();
      If	is_open() == false, returns a null pointer. Otherwise,
      closes the
      file, and returns *this.

   bool
   is_open() const;
      Returns true if the associated file is open.

   basic_filebuf<charT,traits>*
   open(const char* s, ios_base::openmode mode,
        long protection = 0666);
      If	is_open() == true, returns a null pointer.  Otherwise opens
      the	file, whose name	is stored in the
      null-terminated byte-string s.	 The file open modes	are
      given by their C-equivalent	description (see the C
      function fopen):

      in			     "w"
      in|binary		     "rb"
      out		     "w"
      out|app		     "a"
      out|binary		     "wb"
      out|binary|app	     "ab"
      out|in		     "r+"
      out|in|app		     "a+"
      out|in|binary	     "r+b"
      out|in|binary|app	     "a+b"
      trunc|out		     "w"
      trunc|out|binary	     "wb"
      trunc|out|in	     "w+"
      trunc|out|in|binary     "w+b"

      The third argument, protection, is	used as	the file permission.
      It	does not appear	in the Standard	C++ description	of the
      function	open and is provided as an extension. It determines
      the file  read/write/execute permissions under UNIX.  It is more
      limited  under DOS	since files are always readable and do not
      have  special execute permission. If the	open function fails,
      it	returns	a null pointer.

   basic_filebuf<charT,traits>*
   open(int fd);
      Attaches the file previously opened and identified	by its file
      descriptor fd, to	the basic_filebuf object. This function	is
      not described in the C++ standard, and is provided as an extension
      in order	to manipulate pipes, sockets or other UNIX devices,
      that	can be accessed	through	file descriptors.

   int_type
   overflow(int_type c =	traits::eof() );
      If	the output sequence has	a put position available, and c	is not
      traits::eof(), then write c into it. If there is no position
      available, the function output the content of	the buffer to
      the associated file and then write	c at the new current put
      position.  If the operation fails, the function returns
      traits::eof(). Otherwise  it returns traits::not_eof(c). In wide
      characters file buffer,  overflow converts the internal wide
      characters to their external  multibytes representation by	using
      the locale::codecvt  facet	located	in the locale object imbued in
      the stream buffer.

   int_type
   pbackfail(int_type c = traits::eof() );
      Puts back the character designated	by c into the input sequence. If
      traits::eq_int_type(c,traits::eof()) returns true,	move the input
      sequence one position backward. If	the operation fails, the function
      returns traits::eof(). Otherwise it returns traits::not_eof(c).

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,	  ios_base::openmode
        which = ios_base::in | ios_base::out);
      If	the open mode is in | out, alters the stream position of both
      the input and the output sequence. If the open	mode is	in,
      alters the stream position of only the input	sequence, and
      if it is out, alters the stream position of only the output
      sequence. The new position is calculated by combining the two
      parameters off (displacement) and way (reference point). If
      the current position of	the sequence is	invalid	before repo-
      sitioning,	the operation fails and	the return value is
      pos_type(off_type(-1)). Otherwise the function returns the
      current	new position. File buffers using locale::codecvt facet
      performing state dependent conversion, only	support
      seeking	to the beginning of the	file, to	the current
      position, or to a position previously obtained by a	call
      to	one of the iostreams seeking functions.

   pos_type
   seekpos(pos_type sp,ios_base::openmode      which = ios_base::in |
   ios_base::out);
      If	the open mode is in | out, alters the stream position of both
      the input and the output sequence. If the open	mode is	in,
      alters the stream position of only the input	sequence, and
      if it is out, alters the stream position of only the output
      sequence. If the current position of the sequence is invalid
      before repositioning, the operation fails and the return
      value is pos_type(off_type(-1)). Otherwise the function returns
      the current new position. File buffers using locale::codecvt
      facet performing state dependent conversion, only support
      seeking to the beginning of the file, to the current position,
      or to a position previously obtained by a call to one of the
      iostreams	seeking	functions.

   basic_filebuf<charT,traits>*
   setbuf(char_type*s, streamsize n);
      If	s is not a null	pointer, output	the content of the current
      buffer to the associated file, then delete the current buffer and
      replace it	by s. Otherwise resize the current buffer to size n
      after outputting its content to the associated file if
      necessary.

   int
   sync();
      Synchronizes the content of the external file, with its image
      maintained in	memory by the file buffer. If the function
      fails, it returns -1, otherwise it returns 0.

   int_type
   underflow();
      If	the input sequence has a read position available, returns the
      content of	this position. Otherwise fills up the buffer by
      reading	characters from the associated file and if it
      succeeds, returns the content of the new current position. The
      function	returns	traits::eof() to indicate failure. In wide
      characters file buffer, underflow	converts the external
      mutltibytes characters to their wide character representation by
      using the locale::codecvt facet located in the locale object
      imbued in the stream buffer.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. The function returns the
      number of characters written.

 EXAMPLES

   //
   // stdlib/examples/manual/filebuf.cpp
   //
   #include<iostream>
   #include<fstream>
   void main ( )
   {
    using namespace std;
     // create a	read/write file-stream object on tiny char
     // and attach it to	the file "filebuf.out"
    ofstream out("filebuf.out",ios_base::in |	       ios_base::out);
     // tie the istream object to the ofstream object
    istream in(out.rdbuf());
     // output to out
    out << "Il errait comme un ame en peine";
     // seek to the beginning of	the file
    in.seekg(0);
     // output in to the	standard output
    cout	<< in.rdbuf() << endl;
     // close the file "filebuf.out"
    out.close();
     // open the	existing file "filebuf.out"
     // and truncate it
    out.open("filebuf.out",ios_base::in |       ios_base::out |
    ios_base::trunc);
     // set the buffer size
    out.rdbuf()->pubsetbuf(0,4096);
     // open the	source code file
    ifstream ins("filebuf.cpp");
     //output it	to filebuf.out
    out << ins.rdbuf();
     // seek to the beginning of	the file
    out.seekp(0);
     // output the all file to the standard output
    cout	<< out.rdbuf();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_ifstream, basic_ofstream,
   basic_fstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.8.1.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  3 - basic_fstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_fstream,fstream,ofstream

   This page describes the ANSI basic_fstream class.  If	you would like
   information on the	pre-ANSI fstream class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_fstream
   : public basic_iostream<charT, traits>

 DESCRIPTION

   The template class basic_fstream<charT,traits> supports reading and
   writing to named files or other devices associated with a file
   descriptor. It	uses a basic_filebuf object to control the
   associated sequences. It inherits from basic_iostream and can
   therefore	use all	the formatted and unformatted input	and
   output functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_fstream
   : public basic_iostream<charT, traits> {

   public:

    typedef basic_ios<charT, traits>   ios_type;

    typedef charT		       char_type;
    typedef traits		       traits_type;
    typedef typename traits::int_type  int_type;
    typedef typename traits::pos_type  pos_type;
    typedef typename traits::off_type  off_type;

    basic_fstream();

    explicit basic_fstream(const	char *s, ios_base::openmode
 			  mode = ios_base::in |	ios_base::out,
 			  long protection = 0666);

    explicit basic_fstream(int fd);

    basic_fstream(int fd, char_type *buf, int len);

    virtual ~basic_fstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_base::in | ios_base::out,
 	     long protection = 0666);

    void	close();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   fstream
      The type fstream is an instantiation of class basic_fstream on type
      char:

        typedef basic_fstream<char> fstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wfstream
      The type wfstream is an instantiation of class basic_fstream  on type
      wchar_t:

        typedef basic_fstream<wchar_t> wfstream;

 CONSTRUCTORS

   basic_fstream();
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction,
      a file can be attached to the basic_ftream object by using the
      open() member function.

   basic_fstream(const char* s,
 	       ios_base::openmode mode=
 	       ios_base::in | iosw_base::out,
 	       long protection=	0666);
      Constructs an	object of class	basic_fstream<charT,traits>,
      initializing the base	class basic_iostream with  the
      associated file buffer, which is initialized  by calling the
      basic_filebuf	constructor  basic_filebuf<charT,traits>().
      The constructor then  calls the open function
      open(s,mode,protection) in  order to attach the file, whose name
      is pointed at by	s,  to the basic_ftream object. The third
      argument,  protection, is used as the file permission. It does
      not appear in	the Standard C++ description and is provided
      as an extension. It determines the  file read/write/execute
      permissions under UNIX.   It is more limited under DOS since
      files are always	readable and do not have special execute
      permission.

   explicit basic_fstream(int fd);
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_ftream object. This
      constructor	is not described in the C++ standard, and
      is provided as an extension in order to	manipulate pipes,
      sockets or other UNIX	devices, that can be accessed through
      file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_fstream(int fd,	char_type* buf,int len);
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_ftream object. The
      underlying buffer is	then replaced by calling the
      basic_filebuf member function, setbuf(), with parameters	buf
      and	len. This constructor is not described in the C++
      standard, and is provided as an extension in order	to manipulate
      pipes, sockets, or other UNIX devices that can be	accessed
      through file descriptors. It also maintains compatibility with
      the old iostreams library. If the function fails, it	sets
      ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_fstream();
      Destroys an object	of class basic_fstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this
      function fails, it calls the basic_ios member function
      setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return
      its result.

   void
   open(const char* s,ios_base::openmode	=
       ios_base::out | ios_base::in,
       long protection =	0666);
      Calls the associated basic_filebuf function
      open(s,mode,protection) and, if this function fails at
      opening	the file, calls	the basic_ios member	function
      setstate(failbit). The	third argument  protection is used as
      the file permissions. It does not  appear in the Standard C++
      description and is provided as	an extension. It determines
      the	file read/write/execute  permissions	under UNIX. It
      is more limited under DOS since files are always readable and do
      not	have special  execute permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the	stream.

 EXAMPLES

   //
   // stdlib/examples/manual/fstream.cpp
   //
   #include<iostream>
   #include<bidirec>
   void main ( )
   {
      using namespace std;

       // create	a bi-directional fstream object
      fstream inout("fstream.out");

       // output	characters
      inout << "Das ist die rede	von einem man" << endl;
      inout << "C'est l'histoire	d'un home" << endl;
      inout << "This is the story of a man" << endl;

      char p[100];

       // seek back to the beginning of the file
      inout.seekg(0);

       // extract the first line
      inout.getline(p,100);

       // output	the first line to stdout
      cout << endl << "Deutch :"	<< endl;
      cout << p;

      fstream::pos_type pos = inout.tellg();

       // extract the seconf line
      inout.getline(p,100);

       // output	the second line	to stdout
      cout << endl << "Francais :" << endl;
      cout << p;

       // extract the third line
      inout.getline(p,100);

       // output	the third line to stdout
      cout << endl << "English :" << endl;
      cout << p;

       // move the put sequence before the second line
      inout.seekp(pos);

       // replace the second line
      inout << "This is the story of a man" << endl;

       // replace the third line
      inout << "C'est l'histoire	d'un home";

       // seek to the beginning of the file
      inout.seekg(0);

       // output	the all	content	of the fstream object to stdout
      cout << endl << endl << inout.rdbuf();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ifstream, basic_ofstream

   Working Paper	for Draft Proposed International Standard for Information
   Systems--Programming Language	C++, Section 27.8.1.11

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  4 - basic_ifstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ifstream,fstream

   This page describes the ANSI basic_ifstream class.  If you would like
   information on the pre-ANSI ifstream class, use the command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ifstream
   : public basic_istream<charT,	traits>

 DESCRIPTION

   The template class basic_ifstream<charT,traits> supports reading
   from	named files	or other devices associated with a file
   descriptor. It uses a basic_filebuf	object to control the
   associated sequences.  It	inherits from basic_istream	and
   can	therefore use all the formatted	and unformatted	input
   functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ifstream
   : public basic_istream<charT,	traits>	{

   public:

    typedef basic_ios<charT, traits>    ios_type;

    typedef traits		       traits_type;
    typedef charT		       char_type;
    typedef typename traits::int_type   int_type;
    typedef typename traits::pos_type   pos_type;
    typedef typename traits::off_type   off_type;

    basic_ifstream();

    explicit basic_ifstream(const char *s,
 			   ios_base::openmode mode =
 			   ios_base::in,
 			   long	protection = 0666);

    explicit basic_ifstream(int fd);

    basic_ifstream(int fd, char_type* buf, int len);

    virtual ~basic_ifstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_base::in, long	protection = 0666);

    void	close();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   ifstream
      The type ifstream is an instantiation of class basic_ifstream on type
      char:

        typedef basic_ifstream<char> ifstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wifstream
      The type wifstream	is an instantiation of class basic_ifstream on
      type wchar_t:

        typedef basic_ifstream<wchar_t> wifstream;

 CONSTRUCTORS

   basic_ifstream();
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction,
      a file can be attached to the basic_iftream object by using the
      open member function.

   basic_ifstream(const char* s,
 		ios_base::openmode mode= ios_base::in,
 		long protection= 0666);
      Constructs an object	of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which	is initialized by calling the basic_filebuf
      constructor basic_filebuf<charT,traits>(). The constructor then
      calls the open function open(s,mode,protection) in	order to
      attach the file whose name is pointed at by s, to the
      basic_iftream object. The third argument protection provides file
      permissions. It does not appear in the Standard C++ description
      and is provided as an extension. It determines the file
      read/write/execute permissions under UNIX. It is more limited
      under DOS	since files are	always readable	and do not have
      special	execute	permission.

   explicit basic_ifstream(int fd)
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_iftream	object.	This
      constructor is not described in the C++ standard, and	is
      provided as an extension in order to	manipulate pipes,
      sockets or other UNIX	devices, that can be accessed through
      file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_ifstream(int fd, char_type* buf,int len);
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_iftream	object.	The
      underlying buffer is then replaced by calling the basic_filebuf
      member function setbuf with parameters buf and len.	This
      constructor is not	described in the C++ standard, and is
      provided as an extension in order to manipulate pipes, sockets or
      other UNIX devices, that can be	accessed through file
      descriptors. It also maintains compatibility with the old
      iostreams library. If the function fails, it	sets
      ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_ifstream();
      Destroys an object	of class basic_ifstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this function
      fails, it calls the basic_ios member function setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return its
      result.

   void
   open(const char* s,ios_base::openmode	=
       ios_base::in, long protection = 0666);
      Calls the associated basic_filebuf function
      open(s,mode,protection). If this function fails	opening	the
      file, it calls the basic_ios member	function
      setstate(failbit). The	third argument protection provides
      file	permissions. It	does not appear	in the Standard	C++
      description and is provided as	an extension. It determines
      the	file read/write/execute permissions	under UNIX. It
      is more limited under DOS since files are always readable and do
      not	have special execute permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the	stream.

 EXAMPLES

   //
   // stdlib/examples/manual/ifstream.cpp
   //
   #include<iostream>
   #include<fstream>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    long	  l= 20;
    char	  *ntbs="Le minot passait la piece a frotter";
    char	  c;
    char	  buf[50];

   try {

     // create a	read/write file-stream object on char
     // and attach it to	an ifstream object
    ifstream in("ifstream.out",ios_base::in |
 	       ios_base::out | ios_base::trunc);

     // tie the ostream object to the ifstream object
    ostream out(in.rdbuf());

     // output ntbs in out
    out << ntbs << endl;

     // seek to the beginning of	the file
    in.seekg(0);

     // output each word	on a separate line
    while ( in.get(c) )
      {
       if ( char_traits<char>::eq(c,' ')	)
        cout << endl;
       else
        cout << c;
      }
    cout	<< endl	<< endl;

     // move back to the	beginning of the file
    in.seekg(0);

     // clear the state flags
    in.clear();

     // does the	same thing as the previous code
     // output each word	on a separate line
    while ( in >> buf )
     cout << buf	<< endl;

    cout	<< endl	<< endl;

     // output the base info before each	integer
    out << showbase;

    ostream::pos_type pos= out.tellp();

     // output l	in hex with a field with of 20
    out << hex << setw(20) << l << endl;

     // output l	in oct with a field with of 20
    out << oct << setw(20) << l << endl;

     // output l	in dec with a field with of 20
    out << dec << setw(20) << l << endl;

     // move back to the	beginning of the file
    in.seekg(0);

     // output the all file
    cout	<< in.rdbuf();

     // clear the flags
    in.clear();

     // seek the	input sequence to pos
    in.seekg(pos);

    int a,b,d;

     // read the	previous outputted integer
    in >> a >> b	>> d;

     // output 3	times 20
    cout	<< a <<	endl <<	b << endl << d << endl;

   }
    catch( ios_base::failure& var )
      {
        cout << var.what();
      }

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ofstream, basic_fstream

   Working Paper	for Draft Proposed International Standard for Information
   Systems--Programming Language	C++, Section 27.8.1.5

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  5 - basic_ios

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ios,ios

   This page describes the ANSI ios class.  If you would	like
   information on the pre-ANSI ios class, use the command:

        help cxxl

 SYNOPSIS

   #include <ios>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ios : public ios_base

 DESCRIPTION

   The class basic_ios is a base	class that provides the	common
   functionality required by all streams. It maintains	state
   information that reflects	the integrity of the stream and stream
   buffer. It	also maintains the link between the stream classes and
   the stream buffers classes via	the rdbuf member functions.
   Classes derived from basic_ios specialize operations for input, and
   output.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ios : public ios_base {

     public:

      typedef basic_ios<charT, traits>		ios_type;
      typedef basic_streambuf<charT, traits>	streambuf_type;
      typedef basic_ostream<charT, traits>	ostream_type;

      typedef typename traits::char_type		char_type;
      typedef traits				traits_type;

      typedef typename traits::int_type		int_type;
      typedef typename traits::off_type		off_type;
      typedef typename traits::pos_type		pos_type;

      explicit basic_ios(basic_streambuf<charT, traits> *sb_arg);
      virtual ~basic_ios();

      char_type fill() const;
      char_type fill(char_type ch);

      void exceptions(iostate except);
      iostate exceptions() const;

      void clear(iostate	state =	goodbit);

      void setstate(iostate state);
      iostate rdstate() const;

      operator void*() const;
      bool operator!() const;

      bool good() const;
      bool eof()	const;
      bool fail() const;
      bool bad()	const;

      ios_type& copyfmt(const ios_type& rhs);

      ostream_type *tie() const;
      ostream_type *tie(ostream_type *tie_arg);

      streambuf_type *rdbuf() const;
      streambuf_type *rdbuf( streambuf_type *sb);

      locale imbue(const	locale&	loc);

      char narrow(charT,	char) const;
      charT widen(char) const;

     protected:

      basic_ios();

      void init(basic_streambuf<charT, traits> *sb);
   };

 TYPES

   char_type
      The type char_type	is a synonym of	type traits::char_type.

   ios
      The type ios is an	instantiation of basic_ios on char:

        typedef basic_ios<char> ios;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits> .

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostream_type
      The type ostream_type is a	synonym	for basic_ostream<charT, traits> .

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf_type
      The type streambuf_type is	a synonym for basic_streambuf<charT, traits>
      .

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wios
      The type wios is an instantiation of basic_ios on wchar_t:

        typedef basic_ios<wchar_t> wios;

 PUBLIC CONSTRUCTORS

   explicit basic_ios(basic_streambuf<charT, traits>* sb);
      Constructs	an object of class basic_ios, assigning	initial	values
      to its member objects by calling init(sb). If sb is a null
      pointer, the stream is	positioned in error state, by
      triggering its badbit.

   basic_ios();
      Constructs	an object of class basic_ios leaving its member
      objects	uninitialized.	The object must	be initialized
      by calling the init member function before using it.

 PUBLIC DESTRUCTOR

   virtual ~basic_ios();
      Destroys an object	of class basic_ios.

 PUBLIC MEMBER FUNCTIONS

   bool
   bad()	const;
      Returns true if badbit is set in rdstate().

   void
   clear(iostate	state =	goodbit);
      If	(state & exception()) == 0, returns.  Otherwise, the function
      throws an	object of class	ios_base::failure. After the call
      returns state	== rdstate().

   basic_ios&
   copyfmt(const	basic_ios& rhs);
      Assigns to	the member objects of *this the	corresponding member
      objects of	rhs, with the following	exceptions:

      +	     rdstate() and rdbuf() are left unchanged

      +	     calls ios_base::copyfmt

      +	     exceptions() is altered last by calling
 	  exceptions(rhs.exceptions())

   bool
   eof()	const;
      Returns true if eofbit is set in rdstate().

   iostate
   exceptions() const;
      Returns a mask that determines what elements set in rdstate()
      cause exceptions	to be thrown.

   void
   exceptions(iostate except);
      Set the exception mask to except then calls clear(rdstate()).

   bool
   fail() const;
      Returns true if failbit or	badbit is set in rdstate().

   char_type
   fill() const;
      Returns the character used	to pad (fill) an output	conversion to
      the specified field width.

   char_type
   fill(char_type fillch);
      Saves the field width value then replaces it by fillch and
      returns	the previously	saved value.

   bool
   good() const;
      Returns rdstate() == 0.

   locale
   imbue(const locale& loc);
      Saves the value returned by getloc() then assigns loc to a
      private	variable and if rdbuf() != 0 calls
      rdbuf()->pubimbue(loc) and returns the previously	saved value.

   void
   init(basic_streambuf<charT,traits>* sb);
      Performs the following initialization:

      rdbuf()	  sb
      tie()	  0
      rdstate()	  goodbit if sb	is not null otherwise badbit
      exceptions() goodbit
      flags()	  skipws | dec
      width()	  0
      precision()  6
      fill()	  the space character
      getloc()	  locale::locale()

   char
   narrow(charT c, char dfault) const;
      Uses the stream's locale to convert the wide character c to a
      tiny	character, and	then returns it. If no
      conversion exists, it returns the character dfault.

   bool
   operator!() const;
      Returns fail() ? 1	: 0;

   streambuf_type*
   rdbuf() const;
      Returns a pointer to the stream buffer associated with the	stream.

   streambuf_type*
   rdbuf(streambuf_type*	sb);
      Associates	a stream buffer	with the stream. All the input and
      output will be directed to this stream buffer. If	sb is a	null
      pointer, the stream is positioned in error state, by triggering
      its badbit.

   iostate
   rdstate() const;
      Returns the control state of the stream.

   void
   setstate(iostate state);
      Calls clear(rdstate() | state).

   ostream_type*
   tie()	const;
      Returns an	output sequence	that is	tied to	(synchronized with) the
      sequence controlled by the	stream buffer.

   ostream_type*
   tie(ostream_type* tiestr);
      Saves the tie() value then	replaces it by tiestr and returns the
      value previously	saved.

   operator
   void*() const;
      Returns fail() ? 0	: 1;

   charT
   widen(char c)	const;
      Uses the stream's locale to convert the tiny character c to a
      wide	character, then returns it.

 SEE ALSO

   ios_base, basic_istream, basic_ostream,
   basic_streambuf, char_traits

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++.

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  6 - basic_iostream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_iostream,iostream

   This page describes the ANSI basic_iostream class.  If you would
   like information on the pre-ANSI iostream class, use the command:

        help cxxl

 SYNOPSIS

   #include <istream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_iostream
   : public basic_istream<charT,	traits>,
   public basic_ostream<charT, traits>

 DESCRIPTION

   The class basic_iostream inherits a number of	functions from classes
   basic_ostream<charT, traits> and basic_istream<charT,	traits>. They
   assist in formatting	and interpreting sequences of characters
   controlled by a stream buffer. Two groups of functions share common
   properties, the formatted functions	and the	unformatted functions.

 INTERFACE

   template<class charT,	class traits>
   class	basic_iostream
   : public basic_istream<charT,	traits>,
    public basic_ostream<charT, traits>

   {

   public:

    explicit basic_iostream(basic_streambuf<charT, traits> *sb);
    virtual ~basic_iostream();

   protected:

    explicit basic_iostream();

   };

 PUBLIC CONSTRUCTORS

   explicit basic_iostream(basic_streambuf<charT, traits>* sb);
      Constructs	an object of class basic_iostream, assigning initial
      values to	the base class by calling
      basic_istream<charT, traits>(sb) and
      basic_ostream<charT, traits>(sb).

   explicit basic_iostream();
      Constructs	an object of class basic_iostream, assigning
      initial values to	the base class by calling
      basic_istream<charT, traits>() and basic_ostream<charT, traits>().
      After construction	the object has its badbit set.

 DESTRUCTOR

   virtual ~basic_iostream();
      Destroys an object	of class basic_iostream.

 EXAMPLES

   See basic_istream and	basic_ostream examples.

 COMPATIBILITY

   [Digital]  The ANSI Standard Library provides	two macros which
   enable	or disable use of the ANSI iostream package at compile
   time.

   ______________________________________________________________
   Macro			  Description
   ______________________________________________________________
   __USE_STD_IOSTREAM	  Use the ANSI Standard	iostream package
   __NO_USE_STD_IOSTREAM	  Use the pre-ANSI iostream package
   ______________________________________________________________

   See ios_intro(help cxxl) or iostream_intro(help cxxlstd) for more
   details.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_istream, basic_ostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section
   27.6.1.4.1

 STANDARDS CONFORMANCE

   ANSI X3J16/ISO WG21 Joint C++	Committee

  7 - basic_istream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_istream,istream

   This page describes the ANSI basic_istream class.  If	you would like
   information on the	pre-ANSI istream class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <istream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_istream
   : virtual public basic_ios<charT, traits>

 DESCRIPTION

   The class basic_istream defines a number of member function
   signatures that assist in reading and	interpreting input from
   sequences controlled by	a stream buffer.

   Two groups of	member function	signatures share common	properties:
   the formatted input functions (or extractors) and the unformatted
   input functions. Both groups of input functions obtain	(or
   extract) input characters by calling basic_streambuf member
   functions. They both begin by constructing an object of class
   basic_istream::sentry	and, if	this object is in good state after
   construction, the function endeavors to	obtain the requested
   input. The sentry object performs exception safe initialization,
   such as controlling the status of the stream	or locking it
   in multithread environment.

   Some formatted input functions parse characters extracted from the
   input sequence, converting the result to a value of	some scalar
   data type, and storing the converted	value in an object of that
   scalar type.	The conversion behavior	is locale dependent,
   and directly depend on the	locale object imbued in the
   stream.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_istream
   : virtual public basic_ios<charT, traits> {

   public:

   typedef basic_istream<charT, traits>	  istream_type;
   typedef basic_ios<charT, traits>	  ios_type;
   typedef basic_streambuf<charT, traits>  streambuf_type;

   typedef traits		      traits_type;
   typedef charT			      char_type;
   typedef typename traits::int_type   int_type;
   typedef typename traits::pos_type   pos_type;
   typedef typename traits::off_type   off_type;

   explicit basic_istream(basic_streambuf<charT,	traits>	*sb);
   virtual ~basic_istream();

   class	sentry
     {
       public:

        inline explicit sentry(basic_istream<charT,traits>&,
 			      bool noskipws = 0);
 	 ~sentry();
 	operator bool ();
     };

   istream_type&	operator>>(istream_type& (*pf)(istream_type&));
   istream_type&	operator>>(ios_base& (*pf)(ios_base&));
   istream_type&	operator>>(ios_type& (*pf)(ios_type&));

   istream_type&	operator>>(bool& n);
   istream_type&	operator>>(short& n);
   istream_type&	operator>>(unsigned short& n);
   istream_type&	operator>>(int&	n);
   istream_type&	operator>>(unsigned int& n);
   istream_type&	operator>>(long& n);
   istream_type&	operator>>(unsigned long& n);
   istream_type&	operator>>(float& f);
   istream_type&	operator>>(double& f);
   istream_type&	operator>>(long	double&	f);

   istream_type&	operator>>(void*& p);

   istream_type&	operator>>(streambuf_type& sb);
   istream_type&	operator>>(streambuf_type *sb);

   int_type get();

   istream_type&	get(char_type *s, streamsize n,	char_type delim);
   istream_type&	get(char_type *s, streamsize n);

   istream_type&	get(char_type& c);

   istream_type&	get(streambuf_type& sb,char_type delim);
   istream_type&	get(streambuf_type& sb);

   istream_type&	getline(char_type *s, streamsize n,char_type delim);
   istream_type&	getline(char_type *s, streamsize n);

   istream_type&	ignore(streamsize n = 1,
 		       int_type	delim =	traits::eof());

   istream_type&	read(char_type *s, streamsize n);

   streamsize readsome(char_type	*s, streamsize n);

   int peek();

   pos_type tellg();

   istream_type&	seekg(pos_type&);
   istream_type&	seekg(off_type&, ios_base::seekdir);

   istream_type&	putback(char_type c);
   istream_type&	unget();

   streamsize gcount() const;

   int sync();

   protected:

   explicit basic_istream( );

   };

   //global function

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   ws(basic_istream<charT, traits>&);
   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>> (basic_istream<charT, traits>&, charT&);
   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>> (basic_istream<charT, traits>&, charT*);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, unsigned char&);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, signed char&);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, unsigned char*);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, signed char*);

 TYPES

   char_type
      The type char_type	is a synonym for them template parameter charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits> .

   istream
      The type istream is an instantiation of class basic_istream on type
      char:

        typedef basic_istream<char> istream;

   istream_type
      The type istream_type is a	synonym	for basic_istream<charT, traits>.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf_type
      The type streambuf_type is	a synonym for
      basic_streambuf<charT, traits>.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wistream
      The type wistream is an instantiation of class basic_istream on type
      wchar_t:

      typedef basic_istream<wchar_t> wistream;

 PUBLIC CONSTRUCTOR

   explicit basic_istream(basic_streambuf<charT,	traits>* sb);
      Constructs	an object of class basic_istream, assigning initial
      values to the base class by calling basic_ios::init(sb).

 PUBLIC DESTRUCTOR

   virtual ~basic_istream();
      Destroys an object	of class basic_istream.

 SENTRY CLASS

   explicit sentry(basic_istream<charT,traits>&,	bool noskipws=0);
      Prepares for formatted or unformatted input. First	if the
      basic_ios member function tie() is not a null pointer, the
      function synchronizes the output	sequence with any associated
      stream. If	noskipws is zero and the ios_base member function
      flags() & skipws is nonzero, the function extracts and discards
      each	character as long as the next available	input
      character is a white space	character. If after any	preparation is
      completed the	basic_ios member function good() is true, the
      sentry conversion function operator bool() will	return true.
      Otherwise it will return false. In multithread environment the
      sentry object constructor is responsible for locking the stream
      and the	stream buffer associated with the stream.

   ~sentry();
      Destroys an object	of class sentry. In multithread	environment,
      the sentry object	destructor is responsible for
      unlocking	the stream and the stream buffer associated with the
      stream.

   operator bool();
      If	after any preparation is completed the basic_ios member
      function good() is true, the sentry	conversion function
      operator bool() will return true else it will return false.

 EXTRACTORS

   istream_type&
   operator>>(istream_type&
 	    (*pf) (istream_type&));
 	       Calls pf(*this),	then return *this. See,	for example, the
 	       function	signature ws(basic_istream&).

   istream_type&
   operator>>(ios_type& (*pf) (ios_type&));
      Calls pf(*this), then return *this.

   istream_type&
   operator>>(ios_base& (*pf) (ios_base&));

      Calls pf(*this), then return *this. See, for example, the
      function	signature dec(ios_base&).

   istream_type&
   operator>>(bool& n);
       Converts a	Boolean	value, if one is available, and	stores it in
      n.	If the ios_base member function flag() & ios_base::boolalpha
      is false	it tries to read an integer value, which if found must
      be 0 or 1. If the boolalpha flag is true, it	reads
      characters until it determines whether the characters read are
      correct according to the locale function numpunct<>::truename()
      or numpunct<>::falsename().	If no match is found, it
      calls the basic_ios member function setstate(failbit), which may
      throw ios_base::failure.

   istream_type&
   operator>>(short& n);
      Converts a	signed short integer, if one is	available, and stores
      it in n,	then returns *this.

   istream_type&
   operator>>(unsigned short& n);
      Converts an unsigned short	integer, if one	is available, and
      stores it in	n, then	return *this.

   istream_type&
   operator>>(int& n);
      Converts a	signed integer,	if one is available, and stores	it in
      n, then return *this.

   istream_type&
   operator>>(unsigned int& n);
      Converts an unsigned integer, if one is available,	and stores it
      in n, then return *this.

   istream_type&
   operator>>(long& n);
      Converts a	signed long integer, if	one is available, and stores
      it	in n, then returns *this.

   istream_type&
   operator>>(unsigned long& n);
      Converts an unsigned long integer,	if one is available, and
      stores	it in n,	then returns *this.

   istream_type&
   operator>>(float& f);
      Converts a	float, if one is available, and	stores it in f,	then
      returns *this.

   istream_type&
   operator>>(double& f);
      Converts a	double,	if one is available, and stores	it in f, then
      returns *this.

   istream_type&
   operator>>(long double& f);
      Converts a	long double, if	one is available, and stores it	in f,
      then returns *this.

   istream_type&
   operator>>(void*& p);
      Extracts a	void pointer, if one is	available, and stores it in p,
      then return *this.

   istream_type&
   operator>>(streambuf_type* sb);
      If	sb is null, calls the basic_ios	member function
      setstate(badbit), which may throw ios_base::failure.
      Otherwise extracts characters from *this and inserts them in the
      output sequence controlled by sb. Characters are extracted
      and inserted until any of the following	occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

      istream_type& operator>>(streambuf_type& sb);
        Extracts characters from *this and inserts them in the
        output sequence controlled by sb. Characters are extracted
        and inserted until and of the following occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

 UNFORMATTED FUNCTIONS

   streamsize
   gcount() const;
      Returns the number	of characters extracted	by the last
      unformatted	input member function called.

   int_type
   get();
      Extracts a	character, if one is available.	Otherwise, the
      function	calls the basic_ios member function setstate(failbit),
      which may	throw ios_base::failure.	Returns	the character
      extracted	or traits::eof() if none is available.

   istream_type&
   get(char_type& c);
      Extracts a	character, if one is available,	and assigns it to c.
      Otherwise, the function	calls the basic_ios member function
      setstate(failbit),	which may throw	ios_base::failure.

   istream_type&
   get(char_type* s, streamsize n,char_type delim);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n-1 characters are	stored

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it stores a null character into
      the next successive location	of the array.

   istream_type&
   get(char_type* s, streamsize n);
      Calls get(s,n,widen('0)).

   istream_type&
   get(streambuf_type& sb,char_type delim);
      Extracts characters and inserts them in the output	sequence
      controlled by	sb. Characters are extracted and inserted
      until	any of the following occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     the next available	input character	== delim.

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

   istream_type&
   get(streambuf_type& sb);
      Calls get(sb,widen('0)).

   istream_type&
   getline(char_type* s,	streamsize n, char_type	delim);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n-1 characters are	stored

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it stores a null character into
      the next successive location	of the array.

   istream_type&
   getline(char_type* s,	streamsize n);
      Calls getline(s,n,widen('0)).

   istream_type&
   ignore(streamsize n=1, int_type delim=traits::eof());
      Extracts characters and discards them. Characters are extracted
      until any of the	following occurs:

      +	     n characters are extracted

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

   int_type
   peek();
      Returns traits::eof() if the basic_ios member function good()
      returns false. Otherwise, returns the next	available character.
      Does not increment the current get pointer.

   istream_type&
   putback(char_type c);
      Insert c in the putback sequence.

   istream_type&
   read(char_type* s, streamsize	n);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n characters are stored

      +	     end-of-file occurs	on the input sequence

      If	the function does not store n characters, it calls the
      basic_ios member function setstate(failbit),	which may
      throw	ios_base::failure.

   streamsize
   readsome(char_type* s, streamsize n);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. If
      rdbuf()->in_avail() == -1, calls the basic_ios member function
      setstate(eofbit).

      +	     If	rdbuf()->in_avail() == 0, extracts no characters

      +	     If	rdbuf()->in_avail() > 0, extracts min( rdbuf()->in_avail(),
        	      n)

      In	any case the function returns the number of characters
      extracted.

   istream_type&
   seekg(pos_type& pos);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(pos), which will position the current pointer
      of the input sequence at the position designated by pos.

   istream_type&
   seekg(off_type& off, ios_base::seekdir dir);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(off,dir), which will position the current
      pointer of the input sequence	at the position	designated by
      off and dir.

   int
   sync();
      If	rdbuf()	is a null pointer, return -1. Otherwise, calls
      rdbuf()- >pubsync()	and if that function returns -1	calls
      the basic_ios member function setstate(badbit).	The purpose of
      this function is	to synchronize the internal input buffer,
      with the external sequence of characters.

   pos_type
   tellg();
      If	the basic_ios member function fail() returns true, tellg()
      returns pos_type(off_type(-1)) to indicate	failure. Otherwise it
      returns the current position of the input sequence by calling
      rdbuf()- >pubseekoff(0,cur,in).

   istream_type&
   unget();
      If	rdbuf()	is not null, calls rdbuf()->sungetc(). If rdbuf() is
      null or if	sungetc() returns traits::eof(), calls the basic_ios
      member function setstate(badbit).

 NON MEMBER FUNCTIONS

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>>(basic_istream<charT, traits>& is, charT& c);
      Extracts a	character if one is available, and stores it in	c.
      Otherwise the function calls	the basic_ios member function
      setstate(failbit), which may throw ios_base::failure.

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>>(basic_istream<charT, traits>& is, charT* s);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. If the
      ios_base member function is.width() is greater than zero, then
      is.width() is the maximum number of characters stored. Characters
      are extracted and stored until any of the	following occurs:

      +	     if	is.witdh()>0, is.witdh()-1 characters are extracted

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	is a white space.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it then stores a null character
      into	the next successive location of	the array and calls
      width(0).

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, unsigned char& c);
      Returns is	>> (char&)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, signed char& c);
      Returns is	>> (char&)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, unsigned char* c);
      Returns is	>> (char*)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, signed char* c);
      Returns is	>> (char*)c.

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   ws(basic_istream<charT, traits>& is);
      Skips any white space in the input	sequence and returns is.

 EXAMPLES

   //
   // stdlib/examples/manual/istream1.cpp
   //
   #include<iostream>
   #include<istream>
   #include<fstream>

   void main ( )
   {
    using namespace std;

    float f= 3.14159;
    int	 i= 3;
    char	 s[200];

     // open a file for read and	write operations
    ofstream out("example", ios_base::in	| ios_base::out
 		 | ios_base::trunc);

     // tie the istream object to the ofstream filebuf
    istream  in (out.rdbuf());

     // output to the file
    out << "Annie is the	Queen of porting" << endl;
    out << f << endl;
    out << i << endl;

     // seek to the beginning of	the file
    in.seekg(0);

    f = i = 0;

     // read from the file using	formatted functions
    in >> s >> f	>> i;

     // seek to the beginning of	the file
    in.seekg(0,ios_base::beg);

     // output the all file to the standard output
    cout	<< in.rdbuf();

     // seek to the beginning of	the file
    in.seekg(0);

     // read the	first line in the file
     // "Annie is the Queen of porting"
    in.getline(s,100);

    cout	<< s <<	endl;

     // read the	second line in the file
     // 3.14159
    in.getline(s,100);

    cout	<< s <<	endl;

     // seek to the beginning of	the file
    in.seekg(0);

     // read the	first line in the file
     // "Annie is the Queen of porting"
    in.get(s,100);

     // remove the newline character
    in.ignore();

    cout	<< s <<	endl;

     // read the	second line in the file
     // 3.14159
    in.get(s,100);

    cout	<< s <<	endl;

     // remove the newline character
    in.ignore();

     // store the current file position
    istream::pos_type position =	in.tellg();

    out << "replace the int" << endl;

     // move back to the	previous saved position
    in.seekg(position);

     // output the remain of the	file
     // "replace	the int"
     // this is equivalent to
     // cout << in.rdbuf();
    while( !char_traits<char>::eq_int_type(in.peek(),
    char_traits<char>::eof()) )
     cout << char_traits<char>::to_char_type(in.get());

    cout	<< "0 << flush;
   }

   //
   // istream example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    char	p[50];

     // remove all the white spaces
    cin >> ws;

     // read characters from stdin until	a newline
     // or 49 characters	have been read
    cin.getline(p,50);

     // output the result to stdout
    cout	<< p;
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_iostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  8 - basic_istringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_istringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_istringstream
   : public basic_istream<charT,	traits>

 DESCRIPTION

   The template class basic_istringstream<charT,traits,Allocator>
   provides functionality	to read	from an	array in memory. It
   supports reading objects of class
   basic_string<charT,traits,Allocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_istream and therefore	can use	all the	formatted and
   unformatted input	functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_istringstream
   : public basic_istream<charT,	traits>	{

   public:

    typedef basic_stringbuf<charT, traits, Allocator>  sb_type;
    typedef basic_ios<charT, traits>		      ios_type;

    typedef basic_string<charT, traits, Allocator>     string_type;

    typedef traits			    traits_type;
    typedef charT			    char_type;
    typedef typename traits::int_type	    int_type;
    typedef typename traits::pos_type	    pos_type;
    typedef typename traits::off_type	    off_type;

    explicit basic_istringstream(ios_base::openmode which =
 				ios_base::in);

    explicit basic_istringstream(const string_type& str,
 				ios_base::openmode which =
 				ios_base::in);

    virtual ~basic_istringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   istringstream
      The type istringstream is an instantiation	of class
      basic_istringstream on	type char:

        typedef basic_istringstream<char> istringstream;

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf on
      type charT.

   string_type
      The type string_type is an	instantiation of class basic_string on
      type charT.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wistringstream
      The type wistringstream is	an instantiation of class
      basic_istringstream on	type wchar_t:

        typedef basic_istringstream<wchar_t> wistringstream;

 CONSTRUCTORS

   explicit basic_istringstream(ios_base::openmode which	=
 		     ios_base::in);
 	Constructs an object of	class basic_istringstream,
 	initializing the base class basic_istream with the
 	associated string buffer. The string buffer is ini-
 	tialized by calling the	basic_stringbuf	constructor
 	basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_istringstream(const string_type& str,
 		     ios_base::openmode	which =
 		     ios_base::in);
 	Constructs an object of	class basic_istringstream,
 	initializing the base class basic_istream with the
 	associated string buffer. The string buffer is ini-
 	tialized by calling the	basic_stringbuf	constructor
 	basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_istringstream();
      Destroys an object	of class basic_istringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the
      stream.

   string_type
   str()	const;
      Returns a string object of	type string_type, which	contains a
      copy	of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	string buffer and copies the string object str into
      it.	If the opening mode is in, initialize	the input
      sequence to point at the first character of	the buffer. If
      the opening mode	is out,	initialize the output	sequence to
      point at the first character of the	buffer.	If the opening
      mode is out | app, initialize the output sequence to point at
      the last character of the buffer.

 EXAMPLES

   //
   // stdlib/examples/manual/istringstream.cpp
   //
   #include<iostream>
   #include<sstream>
   #include<string>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    long	  l= 20;
    wchar_t *ntbs=L"Il avait l'air heureux";
    wchar_t c;
    wchar_t buf[50];

     // create a	read/write string-stream object	on wide	char
     // and attach it to	an wistringstream object
    wistringstream in(ios_base::in | ios_base::out);

     // tie the ostream object to the wistringstream object
    wostream out(in.rdbuf());

     // output ntbs in out
    out << ntbs;

     // output each word	on a separate line
    while ( in.get(c) )
      {
       if ( c ==	L' ' )
        wcout <<	endl;
       else
        wcout <<	c;
      }
    wcout << endl << endl;

     // move back the input sequence to the beginning
    in.seekg(0);

     // clear the state flags
    in.clear();

     // does the	same thing as the previous code
     // output each word	on a separate line
    while ( in >> buf )
     wcout << buf << endl;

    wcout << endl << endl;

     // create a	tiny string object
    string test_string("Il dormait pour l'eternite");

     // create a	read/write string-stream object	on char
     // and attach it to	an istringstream object
    istringstream in_bis(ios_base:: in |	ios_base::out |
 			ios_base::app );

     // create an ostream object
    ostream out_bis(in_bis.rdbuf());

     // initialize the string buffer with test_string
    in_bis.str(test_string);

    out_bis << endl;

     // output the base info before each	integer
    out_bis << showbase;

    ostream::pos_type pos= out_bis.tellp();

     // output l	in hex with a field with of 20
    out_bis << hex << setw(20) << l << endl;

     // output l	in oct with a field with of 20
    out_bis << oct << setw(20) << l << endl;

     // output l	in dec with a field with of 20
    out_bis << dec << setw(20) << l << endl;

     // output the all buffer
    cout	<< in_bis.rdbuf();

     // seek the	input sequence to pos
    in_bis.seekg(pos);

    int a,b,d;

     // read the	previous outputted integer
    in_bis >> a >> b >> d;

     // output 3	times 20
    cout	<< a <<	endl <<	b << endl << d << endl;

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_ostringstream,	basic_stringstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.2

 STANDARDS CONFORMANC

   ANSI X3J16/ISO WG21 Joint C++	Committee

  9 - basic_ofstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ofstream,ofstream

   This page describes the ANSI	basic_ofstream class.  If you would
   like information on the pre-ANSI ofstream class, use the command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ofstream
   : public basic_ostream<charT,	traits>

 DESCRIPTION

   The template class basic_ofstream<charT,traits> supports writing
   into	named files	or other devices associated with a file
   descriptor. It uses a basic_filebuf	object to control the
   associated sequences. It inherits	from basic_ostream	and
   can	therefore use all the formatted	and unformatted	output
   functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ofstream
   : public basic_ostream<charT,	traits>	{

   public:

    typedef basic_ios<charT, traits>    ios_type;

    typedef charT		       char_type;
    typedef traits		       traits_type;
    typedef typename traits::int_type   int_type;
    typedef typename traits::pos_type   pos_type;
    typedef typename traits::off_type   off_type;

    basic_ofstream();

    explicit basic_ofstream(const char *s,
 			   ios_base::openmode mode =
 			   ios_base::out,
 			   long	protection = 0666);

    explicit basic_ofstream(int fd);

    basic_ofstream(int fd, char_type* buf, int len);

    virtual ~basic_ofstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_type::out, long protection = 0666);

    void	close();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ofstream
      The type ofstream is an instantiation of  class basic_ofstream on
      type char:

        typedef basic_ofstream<char> ofstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wofstream
      The type wofstream	is an instantiation of class basic_ofstream on
      type wchar_t:

        typedef basic_ofstream<wchar_t> wofstream;

 CONSTRUCTORS

   basic_ofstream();
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class basic_ostream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction a
      file can be attached to	the basic_oftream object using the
      open	member function.

   basic_ofstream(const char* s,
 		ios_base::openmode mode= ios_base::in,
 		long protection= 0666);
 	Constructs an object	of class
 	basic_ofstream<charT,traits>,  initializing the base	class
 	basic_ostream with the associated file buffer, which	is
 	initialized by calling the basic_filebuf constructor
 	basic_filebuf<charT,traits>(). The constructor then calls
 	the open function open(s,mode,protection) in	order to
 	attach the file whose name is pointed at by s, to the
 	basic_oftream object. The third argument, protection, is
 	used	as the file permissions. It does not appear in the
 	Standard C++	description and	is provided as an extension.
 	It determines the file read/write/execute permissions
 	under UNIX.	It is more limited under DOS since files are
 	always readable and do not have special execute permission.

    explicit basic_ofstream(int fd);
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class	basic_ostream with the
      associated file buffer, which is	initialized by calling the
      basic_filebuf constructor basic_filebuf<charT,traits>(). The
      constructor then calls the basic_filebuf open	function
      open(fd) in order to attach the file descriptor	fd to the
      basic_oftream	 object. This constructor is not described in
      the C++ standard, and	is provided as an extension in order
      to	manipulate pipes, sockets or other UNIX	devices, that can be
      accessed through file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_ofstream(int fd, char_type* buf,int len);
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class	basic_ostream with the
      associated file buffer, which is	initialized by calling the
      basic_filebuf constructor basic_filebuf<charT,traits>(). The
      constructor then calls the basic_filebuf open	function
      open(fd) in order to attach the file descriptor	fd to the
      basic_oftream	 object. The underlying	buffer is then
      replaced by calling the basic_filebuf	member function	setbuf
      with parameters	buf and	len. This constructor is not described
      in the C++ standard, and is provided as an extension in order
      to manipulate pipes, sockets or	other UNIX devices, that can
      be	accessed through file descriptors. It also maintains
      compatibility with the old iostreams library. If the function
      fails, it	sets ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_ofstream();
      Destroys an object	of class basic_ofstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this
      function fails, it calls the basic_ios member function
      setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return
      its result.

   void
   open(const char* s,ios_base::openmode	=
  	   ios_base::out, long protection = 0666);
       Calls the	associated basic_filebuf function
       open(s,mode,protection) and, if this function fails opening the
       file, calls the basic_ios	member function	setstate(failbit).
       The third	argument, protection, is used as the file permis-
       sions. It	does not appear	in the Standard	C++ description	and
       is provided as an	extension. It determines the file
       read/write/execute permissions under UNIX, and is	more limited
       under DOS	since files are	always readable	and do not have	special
       execute permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the	stream.

 EXAMPLES

   See basic_fstream, basic_ifstream and	basic_filebuf examples.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ifstream, basic_fstream

   Working Paper	for Draft Proposed International Standard for Information
   Systems--Programming Language	C++, Section 27.8.1.8

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  10 - basic_ostream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ostream

 SYNOPSIS

   #include <ostream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ostream
   : virtual public basic_ios<charT, traits>

 DESCRIPTION

   The class basic_ostream defines a number of member function
   signatures that assist in formatting and writing output to sequences
   controlled by a stream buffer.

   Two groups of	member function	signatures share common	properties:
   the formatted output	functions (or insertors) and the
   unformatted output functions. Both groups of	functions
   insert characters by calling basic_streambuf member functions. They
   both begin by constructing an object of class basic_ostream::sentry
   and, if this object is	in good	state after construction,
   the function tries to perform the requested output. The sentry
   object performs exception-safe initialization, such as
   controlling the status of the	stream or locking it in	multithread
   environment.

   Some formatted output	functions generate the requested output	by
   converting a value from some scalar to text form	and inserting
   the converted text in the output sequence. The conversion behavior
   is locale dependent, and directly depend on the locale	object
   imbued in the stream.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ostream
   :virtual public basic_ios<charT, traits> {

   public:

    typedef basic_ostream<charT,	traits>	  ostream_type;
    typedef basic_ios<charT, traits>	  ios_type;

    typedef traits			  traits_type;
    typedef charT			  char_type;

    typedef typename traits::int_type	  int_type;
    typedef typename traits::pos_type	  pos_type;
    typedef typename traits::off_type	  off_type;

    explicit basic_ostream(basic_streambuf<charT, traits> *sb);
    virtual ~basic_ostream();

   class	sentry {

    public:

       explicit sentry(basic_ostream<charT,traits>&);
        ~sentry();
       operator bool ();

     };

    ostream_type& operator<<(ostream_type& (*pf)(ostream_type&));
    ostream_type& operator<<(ios_base& (*pf)(ios_base&));
    ostream_type& operator<<(ios_type& (*pf)(ios_type&));

    ostream_type& operator<<(bool n);
    ostream_type& operator<<(short n);
    ostream_type& operator<<(unsigned short n);
    ostream_type& operator<<(int	n);
    ostream_type& operator<<(unsigned int n);
    ostream_type& operator<<(long n);
    ostream_type& operator<<(unsigned long n);
    ostream_type& operator<<(float f);
    ostream_type& operator<<(double f);
    ostream_type& operator<<(long double	f);

    ostream_type& operator<<(void *p);

    ostream_type& operator<<(basic_streambuf<char_type, traits>&	sb);
    ostream_type& operator<<(basic_streambuf<char_type, traits> *sb);

    ostream_type& put(char_type c);

    ostream_type& write(const char_type *s, streamsize n);

    ostream_type& flush();

    ostream_type& seekp(pos_type	);
    ostream_type& seekp(off_type	, ios_base::seekdir );
    pos_type tellp();

   protected:

    basic_ostream();

   };

   //global functions

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, charT);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, char);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, const charT*);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, const char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, unsigned char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, signed char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	unsigned char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	signed char*);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   endl(basic_ostream<charT, traits>& os);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   ends(basic_ostream<charT, traits>& os);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   flush(basic_ostream<charT, traits>& os);

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits>.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostream
      The type ostream is an instantiation of class basic_ostream on type
      char:

        typedef basic_ostream<char> ostream;

   ostream_type
      The type ostream_type is a	synonym	for basic_ostream<charT, traits>.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wostream
      The type wostream is an instantiation of class basic_ostream on type
      wchar_t:

        typedef basic_ostream<wchar_t> wostream;

 CONSTRUCTOR

   explicit basic_ostream(basic_streambuf<charT,	traits>* sb);
      Constructs	an object of class basic_ostream, assigning initial
      values to the base class by calling
      basic_ios<charT,traits>::init(sb).

 DESTRUCTOR

   virtual ~basic_ostream();
      Destroys an object	of class basic_ostream.

 SENTRY CLASS

   explicit sentry(basic_ostream<charT,traits>&);
      Prepares for formatted or unformatted output. First if the
      basic_ios member function tie() is not a null pointer, the
      function synchronizes the output	sequence with any associated
      stream. If	after any preparation is	completed the
      basic_ios	member function	good() is true,	the sentry conversion
      function operator bool () will return true. Otherwise it will
      return false. In multithread environment the sentry object
      constructor is	responsible for	locking	the stream and the
      stream buffer associated with the stream.

   ~sentry();
      Destroys an object	of class sentry. If the	ios_base member
      function flags() & unitbuf == true,	then flush the buffer.
      In multithread environment the sentry object destructor is
      responsible for unlocking the stream	and the	stream buffer
      associated with the stream.

   operator bool();
      If	after any preparation is completed the ios_base	member
      function good() is true, the sentry	conversion function
      operator bool() will return true else it will return false.

 INSERTORS

   ostream_type&
   operator<<(ostream_type& (*pf) (ostream_type&));
      Calls pf(*this), then return *this. See, for example, the
      function	signature endl(basic_ostream&).

   ostream_type&
   operator<<(ios_type& (*pf) (ios_type&));
      Calls pf(*this), then return *this.

   ostream_type&
   operator<<(ios_base& (*pf) (ios_base&));
      Calls pf(*this), then return *this. See, for example, the
      function	signature dec(ios_base&).

   ostream_type&
   operator<<(bool n);
      Converts the boolean value	n, and outputs it into the
      basic_ostream object's buffer. If the ios_base member function
      flag() & ios_base::boolalpha is false it tries to write an
      integer value, which must be 0 or 1. If	the boolalpha flag is
      true, it writes characters according to the locale function
      numpunct<>::truename() or numpunct<>::falsename().

   ostream_type&
   operator<<(short n);
      Converts the signed short integer n, and output it	into the stream
      buffer, then return *this.

   ostream_type&
   operator<<(unsigned short n);
      Converts the unsigned short integer n, and	output it into the
      stream buffer, then return *this.

   ostream_type&
   operator<<(int n);
      Converts the signed integer n, and	output it into the stream
      buffer, then return *this.

   ostream_type&
   operator<<(unsigned int n);
      Converts the unsigned integer n, and output it into the stream
      buffer, then return *this.

   ostream_type&
   operator<<(long n);
      Converts the signed long integer n, and output it into the	stream
      buffer, then return *this.

   ostream_type&
   operator<<(unsigned long n);
      Converts the unsigned long	integer	n, and output it into the
      stream buffer, then return *this.

   ostream_type&
   operator<<(float f);
      Converts the float	f and output it	into the stream	buffer,	then
      return *this.

   ostream_type&
   operator<<(double f);
      Converts the double f and output it into the stream buffer, then
      return *this.

   ostream_type&
   operator<<(long double f);
      Converts the long double f	and output it into the stream buffer,
      then return *this.

   ostream_type&
   operator<<(void *p);
      Converts the pointer p, and output	it into	the stream buffer,
      then return *this.

   ostream_type&
   operator<<(basic_streambuf<charT,traits> *sb);
      If	sb is null calls the basic_ios member function
      setstate(badbit). Otherwise gets characters from sb and
      inserts	them into the stream buffer until any of the
      following occurs:

      +	     end-of-file occurs	on the input sequence.

      +	     inserting in the output sequence fails

      +	     an	exception occurs while getting a character from	sb

      If	the function inserts no	characters or if it stopped because an
      exception was thrown while extracting a	character, it calls
      the	basic_ios member function setstate(failbit).	If an
      exception	was thrown while extracting	a character it is
      rethrown.

   ostream_type&
   operator<<(basic_streambuf<charT,traits>& sb);
      Gets characters from sb and inserts them into the stream buffer
      until any of the	following occurs:

      +	     end-of-file occurs	on the input sequence.

      +	     inserting in the output sequence fails

      +	     an	exception occurs while getting a character from	sb

      If	the function inserts no	characters or if it stopped because an
      exception was thrown while extracting a	character, it calls
      the	basic_ios member function setstate(failbit).	If an
      exception was thrown while extracting	a character it is
      rethrown.

 UNFORMATTED FUNCTIONS

   ostream_type&
   flush();
      If	rdbuf()	is not a null pointer, calls rdbuf()->pubsync()	and
      returns *this. If that function returns -1	calls
      setstate(badbit).

   ostream_type&
   put(char_type	c);
      Inserts the character c. If the operation fails, calls the
      basic_ios member function setstate(badbit).

   ostream_type&
   seekp(pos_type pos);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(pos), which will position the current pointer
      of the output sequence at	the position designated	by pos.

   ostream_type&
   seekp(off_type off, ios_base::seekdir	dir);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(off,dir), which will position the current
      pointer of the output	sequence at the	position designated by
      off and dir.

   pos_type
   tellp();
      If	the basic_ios member function fail() returns true, tellp()
      returns pos_type(off_type(-1)) to indicate	failure. Otherwise it
      returns the current position of the output sequence by
      calling	rdbuf()-> pubseekoff(0,cur, out).

   ostream_type&
   write(const char_type* s, streamsize n);
      Obtains characters	to insert from successive locations of an
      array	whose first element is designated by s. Characters are
      inserted until either of	the following occurs:

      +	     n characters are inserted

      +	     inserting in the output sequence fails

      In	the second case	the function calls the basic_ios member	function
      setstate(badbit). The function returns *this.

 NON MEMBER FUNCTIONS

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   endl(basic_ostream<charT, traits>& os);
      Outputs a newline character and flush the buffer, then returns os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   ends(basic_ostream<charT, traits>& os);
      Inserts a null character into the output sequence,	then returns os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   flush(basic_ostream<charT, traits>& os);
      Flushes the buffer, then returns os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, charT c);
      Outputs the character c of	type charT into	the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type charT. Padding is not ignored.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, char c);
      Outputs the character c of	type char into the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type charT. Conversion from characters of type
      char to characters of type charT is performed	by the
      basic_ios member	function widen.	padding	is not ignored.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, char c);
      Outputs the character c of	type char into the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type char. Padding is not ignored.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, const charT* s);
      Outputs the null-terminated-byte-string s of type charT* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type charT.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, const char* s);
      Outputs the null-terminated-byte-string s of type char* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type charT. Conversion from characters
      of type char to characters	of type	charT is performed by the
      basic_ios member function widen.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, const char* s);
      Outputs the null-terminated-byte-string s of type char* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type char.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, unsigned char c);
      Returns os	<< (char)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, signed char c);
      Returns os	<< (char)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, unsigned char* c);
      Returns os	<< (char*)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, signed char* c);
      Returns os	<< (char*)c.

 FORMATTING

   The formatting is done through member	functions or manipulators.

   Manipulators		      Member Functions

   showpos		      setf(ios_base::showpos)
   noshowpos		      unsetf(ios_base::showpos)
   showbase		      setf(ios_base::showbase)
   noshowbase		      unsetf(ios_base::showbase)
   uppercase		      setf(ios_base::uppercase)
   nouppercase		      unsetf(ios_base::uppercase)
   showpoint		      setf(ios_base::showpoint)
   noshowpoint		      unsetf(ios_base::showpoint)
   boolalpha		      setf(ios_base::boolalpha)
   noboolalpha		      unsetf(ios_base::boolalpha)
   unitbuf		      setf(ios_base::unitbuf)
   nounitbuf		      unsetf(ios_base::unitbuf)
   internal		      setf(ios_base::internal,
 				 ios_base::adjustfield)
   left			      setf(ios_base::left,
 				 ios_base::adjustfield)
   right			      setf(ios_base::right,
 				 ios_base::adjustfield)
   dec			      setf(ios_base::dec,
 				 ios_base::basefield)
   hex			      setf(ios_base::hex,
 				 ios_base::basefield)
   oct			      setf(ios_base::oct,
 				 ios_base::basefield)
   fixed			      setf(ios_base::fixed,
 				 ios_base::floatfield)
   scientific		      setf(ios_base::scientific,
 				 ios_base::floatfield)
   resetiosflags
    (ios_base::fmtflags flag)  setf(0,flag)
   setiosflags
    (ios_base::fmtflags flag)  setf(flag)
   setbase(int base)	      See above
   setfill(char_type c)	      fill(c)
   setprecision(int n)	      precision(n)
   setw(int n)		      width(n)

 DESCRIPTION

   showpos   Generates a	+ sign in non-negative generated numeric output

   showbase   Generates a prefix	indicating the numeric base of generated
 	     integer output

   uppercase   Replaces certain lowercase letters with their uppercase
 	      equivalents in generated output

   showpoint   Generates	a decimal-point	character unconditionally in gen-
 	      erated floating-point output

   boolalpha   Insert and extract bool type in alphabetic format

   unitbuf   Flushes output after each output operation

   internal   Adds fill characters at a designated internal point in certain
 	     generated output, or identical to right if	no such	point is
 	     designated

   left	 Adds fill characters on the right (final positions) of	certain
          generated	output

   right	  Adds fill characters on the left (initial positions) of certain
 	  generated output

   dec	Converts integer input or generates integer output in decimal base

   hex	Converts integer input or generates integer output in hexadecimal
 	base

   oct	Converts integer input or generates integer output in octal base

   fixed	  Generates floating-point output in fixed-point notation

   scientific   Generates floating-point	output in scientific notation

   resetiosflagss

   (ios_base::fmtflags flag)   Resets the fmtflags field	flag

   setiosflags

   (ios_base::fmtflags flag)   Set up the flag flag

   setbase(int base)   Converts integer input or	generates integer output
                       in base base. The parameter base can	be 8, 10
                       or 16.

   setfill(char_type c)	 Set the character used	to pad (fill) an output
 			 conversion to the specified field width

   setprecision(int n)	Set the	precision (number of digits after the
                         decimal point) to generate on certain output
                         conversions

   setw(int n)	Set the	field with (number of characters) to generate
                 on certain output conversions

 EXAMPLES

   //
   // stdlib/examples/manual/ostream1.cpp
   //
   #include<iostream>
   #include<ostream>
   #include<sstream>
   #include<iomanip>

   void main ( )
   {
     using namespace std;

     float f= 3.14159;
     int	  i= 22;
     char* s= "Randy is the king	of stdlib";

      //	create a read/write stringbuf object on	tiny char
      //	and attach it to an istringstream object
     istringstream in( ios_base::in | ios_base::out );

      //	tie the	ostream	object to the istringstream object
     ostream out(in.rdbuf());

     out	<< "test beginning !" << endl;

      //	output i in hexadecimal
     out	<< hex << i <<endl;

      //	set the	field width to 10
      //	set the	padding	character to '@'
      //	and output i in	octal
     out	<< setw(10) << oct << setfill('@') << i	<< endl;

      //	set the	precision to 2 digits after the	separator
      //	output f
     out	<< setprecision(3) << f	<< endl;

      //	output the 17 first characters of s
     out.write(s,17);

      //	output a newline character
     out.put('0);

      //	output s
     out	<< s <<	endl;

      //	output the all buffer to standard output
     cout << in.rdbuf();
   }

   //
   // stdlib/examples/manual/ostream2.cpp
   //
   #include<iostream>
   #include<ostream>
   #include<sstream>

   void main ( )
   {
     using namespace std;

     float f= 3.14159;
     wchar_t* s=	L"Kenavo !";

      //	create a read/write stringbuf object on	wide char
      //	and attach it to an wistringstream object
     wistringstream in( ios_base::in | ios_base::out );

      //	tie the	wostream object	to the wistringstream object
     wostream out(in.rdbuf());

     out	<< L"test beginning !" << endl;

      //	output f in scientific format
     out	<< scientific << f <<endl;

      //	store the current put-pointer position
     wostream::pos_type pos = out.tellp();

      //	output s
     out	<< s <<	endl;

      //	output the all buffer to standard output
     wcout << in.rdbuf()	<< endl;

      //	position the get-pointer
     in.seekg(pos);

      //	output s
     wcout << in.rdbuf()	<< endl;
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_iostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.2.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  11 - basic_ostringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ostringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_ostringstream
   : public basic_ostream<charT,	traits>

 DESCRIPTION

   The template class basic_ostringstream<charT,traits,Allocator>
   provides functionality	to write to an array in	memory.	It
   supports writing objects of class
   basic_string<charT,traits,Allocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_ostream and therefore	can use	all the	formatted and
   unformatted output functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_ostringstream
   : public basic_ostream<charT,	traits>	{

   public:

    typedef basic_stringbuf<charT, traits, Allocator> sb_type;
    typedef basic_ios<charT, traits>		     ios_type;

    typedef basic_string<charT, traits, Allocator>    string_type;

    typedef traits			    traits_type;
    typedef charT			    char_type;
    typedef typename traits::int_type	    int_type;
    typedef typename traits::pos_type	    pos_type;
    typedef typename traits::off_type	    off_type;

    explicit basic_ostringstream(ios_base::openmode which =
 				ios_base::out);

    explicit basic_ostringstream(const string_type& str,
 				ios_base::openmode which =
 				ios_base::out);

    virtual ~basic_ostringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostringstream
      The type ostringstream is an instantiation	of class
      basic_ostringstream on	type char:

        typedef basic_ostringstream<char> ostringstream;

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf
      on type charT.

   string_type
      The type string_type is an	instantiation of class basic_string
      on type charT.

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wostringstream
      The type wostringstream is	an instantiation of class
      basic_ostringstream on	type wchar_t:

        typedef basic_ostringstream<wchar_t> wostringstream;

 CONSTRUCTORS

   explicit basic_ostringstream(ios_base::openmode which	=
 			      ios_base::out);
 		Constructs an object of class
 		basic_ostringstream, initializing the base
 		class basic_ostream with the associated
 		string	buffer.	The string buffer is initial-
 		ized by calling the basic_stringbuf con-
 		structor
 		basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_ostringstream(const string_type& str,
 			      ios_base::openmode which =
 			      ios_base::out);
 		Constructs an object of class
 		basic_ostringstream, initializing the base
 		class basic_ostream with the associated
 		string	buffer.	The string buffer is initial-
 		ized by calling the basic_stringbuf con-
 		structor
 		basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_ostringstream();
      Destroys an object	of class basic_ostringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the
      stream.

   string_type
   str()	const;
      Returns a string object of	type string_type whose contents	is a
      copy of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	underlying string buffer and copies the	string object
      str into it. If the opening mode is in, initialize the	input
      sequence to point at the first	character of the buffer. If
      the	opening	mode is	out, initialize	the output sequence to
      point at	the first character of the buffer. If	the opening
      mode is out	| app, initialize the output sequence to
      point at the last character of the buffer.

 EXAMPLES

   See basic_stringstream, basic_istringstream and basic_stringbuf
   examples.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_istringstream,	basic_stringstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.2.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  12 - basic_streambuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_streambuf,streambuf

   This page describes the ANSI streambuf class.	 If you	would like
   information on the pre-ANSI streambuf class,	use the
   command:

        help cxxl

 SYNOPSIS

   #include <streambuf>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_streambuf;

 DESCRIPTION

   The class template basic_streambuf<charT,traits> serves as an
   abstract base class	for deriving various stream buffers whose
   objects each control two character sequences:

   +	  A character input sequence;

   +	  A character output sequence.

   Each sequence	is characterized by three pointers which, if non-null,
   all point	into the same charT array object. The array object
   represents, at any moment, a subsequence	of characters from the
   sequence. Operations performed on a sequence	alter the values
   stored	in these pointers, perform reads and writes directly
   to or	from associated	sequences, and alter "the stream position" and
   conversion state as needed to maintain this subsequence	rela-
   tionship. The	three pointers are:

   +	  The beginning	pointer, or lowest element address in the array;

   +	  The next pointer, or next element address that is a current
        candidate for	reading	or writing;

   +	  The end pointer, or first element address beyond the end of
        the array.

   Stream buffers can impose various constraints	on the sequences they
   control,	including:

   +	  The controlled input sequence	may be unreadable;

   +	  The controlled output	sequence may be	unwritable;

   +	  The controlled sequences can be associated with the
        contents of other representations for character sequences, such
        as external files;

   +	  The controlled sequences can impose limitations on how the
        program can read	characters from	a sequence, write characters
        to	a sequence, put characters back into	an input sequence,
        or alter the	stream position.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_streambuf	{

   public:

   typedef charT			      char_type;
   typedef traits		      traits_type;

   typedef typename traits::int_type    int_type;
   typedef typename traits::pos_type    pos_type;
   typedef typename traits::off_type    off_type;

   virtual ~basic_streambuf();

   locale pubimbue( const locale& loc);
   locale getloc() const;

   basic_streambuf<char_type, traits> *
     pubsetbuf(char_type	*s, streamsize n);

   pos_type pubseekoff(off_type off, ios_base::seekdir way,
 		      ios_base::openmode which =
 		      ios_base::in | ios_base::out);

   pos_type pubseekpos(pos_type sp, ios_base::openmode which =
 		      ios_base::in | ios_base::out);

   int pubsync();

   ios_base::openmode which_open_mode();

   streamsize   in_avail();

   int_type snextc();

   int_type sbumpc();

   int_type sgetc();

   streamsize sgetn(char_type *s, streamsize n);

   int_type sputbackc(char_type c);

   int sungetc();

   int_type sputc(char_type c);

   streamsize sputn(const char_type *s, streamsize n);

   protected:

   basic_streambuf();

   char_type *eback() const;
   char_type *gptr() const;
   char_type *egptr() const;

   void gbump(int n);

   void setg(char_type *gbeg_arg,char_type *gnext_arg,
 	    char_type *gend_arg);

   char_type *pbase() const;
   char_type *pptr() const;
   char_type *epptr() const;

   void pbump(int n);

   void setp(char_type *pbeg_arg,char_type *pend_arg);

   virtual void imbue( const locale& loc);

   virtual int_type overflow(int_type c = traits::eof());

   virtual int_type pbackfail(int_type c	= traits::eof());

   virtual int showmanyc();

   virtual int_type underflow();

   virtual int_type uflow();

   virtual streamsize xsgetn(char_type *s, streamsize n);

   virtual streamsize xsputn(const char_type *s,	streamsize n);

   virtual pos_type seekoff(off_type off,ios_base::seekdir way,
 			   ios_base::openmode which =
 			   ios_base::in	| ios_base::out);

   virtual pos_type seekpos(pos_type sp,ios_base::openmode which	=
 			   ios_base::in	| ios_base::out);

   virtual basic_streambuf<charT, traits>*
     setbuf(char_type *s, streamsize n);

   virtual int sync();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf
      The type streambuf	is an instantiation of class
      basic_streambuf  on	type  char:

        typedef basic_streambuf<char> streambuf;

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wstreambuf
      The type wstreambuf is an instantiation of	 class basic_streambuf on
      type wchar_t:

        typedef basic_streambuf<wchar_t>	wstreambuf;

 PUBLIC CONSTRUCTOR

   basic_streambuf();
      Constructs	an object of class basic_streambuf and initializes all
      its pointer member objects to null pointers and the getloc()
      member function to	return the value of locale::locale().

 PUBLIC DESTRUCTOR

   virtual ~basic_streambuf();
      Destroys an object	of class basic_streambuf.

 PUBLIC MEMBER FUNCTIONS

   locale
   getloc() const;
      If	pubimbue() has ever been called, returns the last value	of loc
      supplied, otherwise, the default locale locale::locale() in
      effect at	the time of construction.

   streamsize
   in_avail();
      If	a read position	is available, returns the number of available
      character in the	input sequence.	Otherwise calls	the protected
      function showmanyc().

   locale
   pubimbue(const locale& loc);
      Calls the protected function imbue(loc).

   pos_type
   pubseekoff(off_type off, ios_base::seekdir way,
 	    ios_base::openmode which =
 	    ios_base::in | ios_base::out );
 	       Calls the protected function seekoff(off,way,which).

   pos_type
   pubseekpos(pos_type sp, ios_base::openmode which=
 	    ios_base::in | ios_base::out );
 	       Calls the protected function seekpos(sp,which).

   basic_streambuf<char_type,traits>*
   pubsetbuf(char_type* s,streamsize n);
      Calls the protected function setbuf(s,n) .

   int
   pubsync();
      Calls the protected function sync().

   int_type
   sbumpc();
      If	the input sequence read	position is not	available, calls the
      function uflow(), otherwise	returns	*gptr()	and increments
      the next	pointer	for the input sequence.

   int_type
   sgetc();
      If	the input sequence read	position is not	available, calls the
      protected function underflow(), otherwise returns *gptr() .

   streamsize
   sgetn(char_type* s, streamsize n);
      Calls the protected function xsgetn(s,n).

   int_type
   snextc();
      Calls the function	sbumpc() and if	it returns traits::eof(),
      returns traits::eof(); otherwise calls the	function sgetc() .

   int_type
   sputbackc(char_type c);
      If	the input sequence putback position is not available, or if
      traits::eq(c,gptr() [-1]) returns false, calls the	protected
      function pbackfail(c), otherwise decrements	the next
      pointer for the input sequence and returns *gptr().

   int_type
   sputc(char_type c);
      If	the output sequence write position is not available, calls the
      protected function overflow(traits::to_int_type( c )).
      Otherwise, stores c at	the next pointer for the output
      sequence, increments the pointer, and returns *pptr() .

   streamsize
   sputn(const char_type* s, streamsize n);
      Calls the protected function xsputn(s,n).

   int_type
   sungetc();
      If	the input sequence putback position is not available, calls
      the	protected function pbackfail(). Otherwise decrements
      the next	pointer	for the input sequence	and returns *gptr().

   ios_base::openmode
   which_open_mode();
      Returns the mode in which the stream buffer is opened. This
      function is not described in the C++ standard.

 PROTECTED MEMBER FUNCTIONS

   char_type*
   eback() const;
      Returns the beginning pointer for the input sequence.

   char_type*
   egptr() const;
      Returns the end pointer for the input sequence.

   char_type*
   epptr() const;
      Returns the end pointer for the output sequence.

   void
   gbump(int n);
      Advances the next pointer for the input sequence by n.

   char_type*
   gptr() const;
      Returns the next pointer for the input sequence.

   void
   imbue(const locale&);
      Changes any translations based on locale. The default behavior is
      to do nothing, this function has	to be overloaded in the
      classes	derived	from basic_streambuf. The purpose of this
      function is to allow the derived class to be informed of changes
      in	locale at the time they	occur. The new imbued	locale object
      is only used by the stream buffer, it does not affect the	stream
      itself.

   int_type
   overflow(int_type c =	traits::eof() );
      The member	functions sputc() and sputn() call this	function in
      case that not enough	room can be found in the put buffer to
      accommodate the argument character sequence. The function
      returns traits::eof() if it fails to	make more room
      available, or to	empty the buffer by writing the characters
      to their output	device.

   int_type
   pbackfail(int_type c = traits::eof() );
      If	c is equal to traits::eof(), gptr() is moved back one position
      otherwise c is prepended. The function returns traits::eof() to
      indicate failure.

   char_type*
   pbase() const;
      Returns the beginning pointer for the output sequence.

   void
   pbump(int n);
      Advances the next pointer for the output sequence by n.

   char_type*
   pptr() const;
      Returns the next pointer for the output sequence.

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,
 	 ios_base::openmode which =
 	 ios_base::in |	ios_base::out );
     Alters the stream positions within one or more of the controlled
     sequences in a way that is defined separately for each class
     derived from basic_streambuf. The default behavior is to return
     an object of type pos_type that stores an invalid stream posi-
     tion.

   pos_type
   seekpos(pos_type sp, ios_base::openmode which=
 	 ios_base::in |	ios_base::out );
     Alters the stream positions	within one or more of the controlled
     sequences in a way that is defined separately for each class
     derived from basic_streambuf. The default behavior is to return
     an object of class pos_type	that stores an invalid stream posi-
     tion.

   basic_streambuf*
   setbuf(char_type* s, streamsize n);
     Performs an operation that	is defined separately for each class
      derived from basic_streambuf. The purpose of this function	is to
      allow the	user to	provide	his own	buffer,	or to resize the
      current buffer.

   void
   setg(char_type* gbeg,	char_type* gnext, char_type* gend);
      Sets up private member for	the following to be true:

      eback() ==	gbeg, gptr() ==	gnext and egptr() == gend

   void
   setp(char_type* pbeg,	char_type* pend);
      Sets up private member for	the following to be true:

      pbase() ==	pbeg, pptr() ==	pbeg and epptr() == pend

   int
   showmanyc();
      Returns the number	of characters available	in the internal
      buffer,	or -1.

   int
   sync();
      Synchronizes the controlled sequences with	the internal buffer,
      in	a way that is defined separately	for each class derived
      from basic_streambuf. The default behavior is to	do nothing. On
      failure the return value	is -1.

   int_type
   underflow();
      The public	members	of basic_streambuf call	this function only if
      gptr() is	null or	gptr() >= egptr(). This	function returns the
      character pointed at	by gptr() if gptr() is not null	and if
      gptr() <	egptr(). Otherwise the	function try to	read
      character into the	buffer,	and if it fails return traits::eof().

   int_type
   uflow();
      Calls underflow() and if underflow() returns traits::eof(),
      returns traits::eof(). Otherwise, does gbump(1) and returns the
      value of *gptr().

   streamsize
   xsgetn(char_type* s, streamsize n);
      Assigns up	to n characters	to successive elements of the array
      whose first element is designated by s. The characters are read
      from the	input sequence. Assigning stops when either n
      characters	have been assigned or a call to sbumpc()	would
      return traits::eof(). The	function returns the number of
      characters read.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. Writing stops when either n
      characters	have been written or	a call to sputc() would	return
      traits::eof(). The function returns the number	of characters
      written.

 SEE ALSO

   char_traits,	basic_filebuf,	basic_stringbuf,
   strstreambuf

   Working Paper	for Draft Proposed International Standard for Information
   Systems--Programming Language	C++, Section 27.5

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  13 - basic_stringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_stringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_stringstream
   : public basic_iostream<charT, traits>

 DESCRIPTION

   The template class basic_stringstream<charT,traits,Allocator>
   provides functionality	to read	and write to an	array in
   memory. It supports writing and reading objects of class
   basic_string<charT,traits,Alocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_iostream and therefore can use all the formatted and
   unformatted output and input	functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_stringstream
   : public basic_iostream<charT, traits> {

   public:

    typedef basic_stringbuf<charT, traits, Allocator>  sb_type;
    typedef basic_ios<charT, traits>		      ios_type;

    typedef basic_string<charT, traits, Allocator>     string_type;

    typedef traits			     traits_type;
    typedef charT			     char_type;
    typedef typename traits::int_type	     int_type;
    typedef typename traits::pos_type	     pos_type;
    typedef typename traits::off_type	     off_type;

    explicit basic_stringstream(ios_base::openmode which	=
 			       ios_base::out | ios_base::in);

    explicit basic_stringstream(const string_type& str,
 			       ios_base::openmode which	=
 			       ios_base::out | ios_base::in);

    virtual ~basic_stringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class
      basic_ios on type charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf on
      type charT.

   string_type
      The type string_type is an	instantiation of class basic_string on
      type charT.

   stringstream
      The type stringstream is an instantiation of class
      basic_stringstream on type char:

        typedef basic_stringstream<char>	stringstream;

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wstringstream
      The type wstringstream is an instantiation	of class
      basic_stringstream on	type wchar_t:

        typedef basic_stringstream<wchar_t> wstringstream;

 CONSTRUCTORS

   explicit basic_stringstream(ios_base::openmode which =
 		    ios_base::in | ios_base::out);
 	Constructs an object of class basic_stringstream, ini-
 	tializing the base class	basic_iostream with the	asso-
 	ciated string buffer. The string	buffer is initialized
         by calling the basic_stringbuf constructor
 	basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_stringstream(const string_type& str,
 		    ios_base::openmode which =
 		    ios_base::in | ios_base::out);
 	Constructs an object of class basic_stringstream, ini-
 	tializing the base class	basic_iostream with the	asso-
 	ciated string buffer. The string	buffer is initialized
         by calling the basic_stringbuf constructor
 	basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_stringstream();
      Destroys an object	of class basic_stringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the
      stream.

   string_type
   str()	const;
      Returns a string object of	type string_type whose contents	is a
      copy of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	string buffer and copies the string object str into
      it.	If the opening mode is in, initializes the input
      sequence to point at	the first character of	the buffer. If
      the opening mode	is out,	initializes the output	sequence to
      point at the first	character of the buffer. If the opening mode
      is out | app, initializes	the output sequence to point at	the
      last character of the buffer.

 EXAMPLES

   //
   // stdlib/examples/manual/stringstream.cpp
   //
   #include<iostream>
   #include<sstream>

   void main ( )
   {
    using namespace std;

     // create a	bi-directional wstringstream object
    wstringstream inout;

     // output characters
    inout << L"Das ist die rede von einem man" << endl;
    inout << L"C'est l'histoire d'un home" << endl;
    inout << L"This is the story	of a man" << endl;

    wchar_t p[100];

     // extract the first line
    inout.getline(p,100);

     // output the first	line to	stdout
    wcout << endl << L"Deutch :"	<< endl;
    wcout << p;

     // extract the seconf line
    inout.getline(p,100);

     // output the second line to stdout
    wcout << endl << L"Francais :" << endl;
    wcout << p;

     // extract the third line
    inout.getline(p,100);

     // output the third	line to	stdout
    wcout << endl << L"English :" << endl;
    wcout << p;

     // output the all content of the
     //wstringstream object to stdout
    wcout << endl << endl << inout.str();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_istringstream,	basic_ostringstream(3c++)

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  14 - cerr

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   cerr

 SYNOPSIS

   #include <iostream>
   extern ostream cerr;

   DESCRIPTION
   ostream cerr;

   The object	cerr controls output to	an unbuffered stream buffer
   associated with the object stderr declared in
   <cstdio>. By default, the standard C and	C++ streams are
   synchronized, but you may improve performance by	using the
   ios_base member function synch_with_stdio to desynchronize them.

 FORMATTING

   The formatting is done through member	functions or manipulators. See
   cout or basic_ostream for details.

 EXAMPLES

   //
   // cerr example
   //
   #include<iostream>
   #include<fstream>

   void main ( )
   {
    using namespace std;

     // open the	file "file_name.txt"
     // for reading
    ifstream in("file_name.txt");

     // output the all file to stdout
    if (	in )
      cout << in.rdbuf();
    else
       // if the	ifstream object	is in a	bad state
       // output	an error message to stderr
      cerr << "Error while opening the file" << endl;
   }

 SEE ALSO

   basic_ostream, iostream, basic_filebuf,
   cout, cin, clog, wcin, wcout,
   wcerr, wclog, iomanip, ios_base,
   basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  15 - char_traits

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   char_traits_ - A traits class	providing types	and operations to the
   basic_string container and iostream classes.

 SYNOPSIS

   #include <string>
   template <class charT> struct	char_traits
   struct char_traits<char>; .
   struct char_traits<wchar_t>;

 DESCRIPTION

   The char_traits struct provides elementary operations	to
   instantiations of basic_string and iostream classes.  As with all
   traits classes, char_traits is used to specialize	the behavior
   of	a template.  In	this case, the traits class	provides
   functions based on character type to the basic_string template
   and to the templates that are part of the iostreams library.

   Specializations of char_traits are provided for char and wchar_t.
   These are used to define, respectively, string and wstring,	 cout
   and wcout, etc.

 INTERFACE

   template <class charT> struct	char_traits .
   {
   typedef charT			   char_type;
   typedef int			   int_type;
   typedef streampos		   pos_type;
   typedef streamoff		   off_type;
   typedef mbstate_t		   state_type;

   static void assign (char_type&, const	char_type&);
   static char_type* assign (char_type*,	size_t,	const char_type&);

   static bool eq (const	char_type&, const char_type&);
   static bool lt (const	char_type&, const char_type&);

   static int compare (const char_type*,	const char_type*, size_t);
   static size_t	length (const char_type	* s);
   static const char_type*
    find	(const char_type*, int,	const char_type&);
   static char_type* move (char_type*,  const char_type*, size_t);
   static char_type* copy (char_type*,  const char_type*, size_t);

   static int_type not_eof(const	int_type& c);
   static char_type to_char_type(const int_type&	c);
   static int_type to_int_type(const char_type& c);
   static bool eq_int_type(const	int_type& c1, const int_type& c2);
   static int_type eof();
   };

 TYPE

   char_type
      The basic character type. Same as the template parameter.

   int_type
      A type that  can represent all the character values
      of char_type as	well as	and end	of file	value.

   pos_type
      A type used to represent a	position within	a stream buffer.

   off_type
      A type used to represent an offset	to a  position within a	stream
      buffer.

   state_type
      A type used to represent the state	class or type that is applied
      to the codecvt facet.  This type is only relevant	for streams
      with a underlying character type that is multi-byte.

 OPERATIONS

   static
   void assign(char_type& c1, const char_type& c2)
      Assigns one character value to another.  The value	of c2 is
      assigned to c1.

   static
   char_type* assign(char_type* s, size_t n, const char_type& a)
      Assigns one character value to n elements of a character array.
      The value of a	is assigned to n elements of s.

   static
   bool eq(const	char_type& c1, const char_type&	c2)
      Returns true if c1	equals c2.

   static
   bool lt(const	char_type& c1, const char_type&	c2)
      Returns true if c1	is less	than c2.

   static
   int compare(const char_type* s1, const char_type* s2,
 	     size_t n)
      Compares n values from s1 with n values	from s2.  Return 1 if
      s1 is greater than s2, -1 if s1	is less	than s2, or 0 if they
      are equal.

   static
   size_t length(const char_type	* s)
      Returns the length	of the null terminated character array s.  The
      eos terminator	is not counted.

   static
   const	char_type* find(const char_type* s, int	n,
 	const char_type& a)
      Looks for the value of a in s.  Only	n elements of s	are
      examined. Returns a pointer to	the matched element if one is
      found.  Otherwise	returns	s + n.

   static
   char_type* move(char_type* s1, const char_type* s2, size_t n)
      Moves n values from s1 to s2.  The	ranges of (s1,s1+n) and
      (s2,s2+n) may overlap.

   static
   char_type* copy(char_type* s1, const char_type* s2, size_t n)
      Copy n values from	s1 to s2. The ranges of	(s1,s1+n) and
      (s2,s2+n)	may not overlap.

   static
   int_type not_eof(const int_type& c)
      Returns c if c is not equal to eof(),  otherwise returns 0.

   static
   int_type to_char_type(const int_type&	c)
      Returns the char_type representation of c.	 This value may	not be
      useful if	no such	representation exists.

   static
   int_type to_int_type(const char_type&	c)
      Returns the int_type representation of c.

   static
   bool eq_int_type(const int_type& c1, const int_type& c2)
      Returns true if c1	equals c2.

   static
   int_type eof()
      Returns EOF.

 SEE ALSO

   basic_string,	traits,	basic_ostream, basic_istream, cout, cin,
   wcout,	wcin

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  16 - cin

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   cin

 SYNOPSIS

   #include <iostream>
   extern istream cin;

 DESCRIPTION
 istream cin;
      The object	cin controls input from	a stream buffer	associated
      with	the object stdin declared in <cstdio>.	By default,
      the	standard C and C++ streams are syn chronized, but you
      can improve performance by using	the ios_base member function
      synch_with_stdio to desynchronize	them.

      After the object cin is initialized, cin.tie() returns &cout,
      which implies that cin and cout are synchronized.

 EXAMPLES

   //
   // cin example one
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    int i;
    float f;
    char	c;

     //read an integer, a float and a character from stdin
    cin >> i >> f >> c;

     // output i, f and c to stdout
    cout	<< i <<	endl <<	f << endl << c << endl;
   }

   //
   // cin example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    char	p[50];

     // remove all the white spaces
    cin >> ws;

     // read characters from stdin until	a newline
     // or 49 characters	have been read
    cin.getline(p,50);

     // output the result to stdout
    cout	<< p;
   }

   When inputting "  Grendel the monster" (newline) in	the previous
   test, the output will be "Grendel the monster". The	manipulator
   ws removes spaces.

 SEE ALSO

   basic_istream, iostream, basic_filebuf,
   cout, cerr,	clog, wcin, wcout,
   wcerr, wclog, ios_base, basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  17 - cout

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   cout

 SYNOPSIS

   #include <iostream>
   extern ostream cout;

 DESCRIPTION

   ostream cout;
      The object	cout controls output to	a stream buffer	associated
      with	the object stdout declared in <cstdio>. By default the
      standard C and C++ streams are synchronized, but performance
      improvement can be achieved by using the ios_base	member
      function	synch_with_stdio to desynchronize them.

      After the object cin is initialized, cin.tie() returns &cout,
      which implies that cin and cout are synchronized.

 FORMATTING

   The formatting is done through member	functions or manipulators.

   Manipulators			Member functions

   showpos			setf(ios_base::showpos)
   noshowpos			unsetf(ios_base::showpos)
   showbase			setf(ios_base::showbase)
   noshowbase			unsetf(ios_base::showbase)
   uppercase			setf(ios_base::uppercase)
   nouppercase			unsetf(ios_base::uppercase)
   showpoint			setf(ios_base::showpoint)
   noshowpoint			unsetf(ios_base::showpoint)
   boolalpha			setf(ios_base::boolalpha)
   noboolalpha			unsetf(ios_base::boolalpha)
   unitbuf			setf(ios_base::unitbuf)
   nounitbuf			unsetf(ios_base::unitbuf)
   internal			setf(ios_base::internal,
 				   ios_base::adjustfield)
   left				setf(ios_base::left,
 				   ios_base::adjustfield)
   right				setf(ios_base::right,
 				   ios_base::adjustfield)
   dec				setf(ios_base::dec,
 				   ios_base::basefield)
   hex				setf(ios_base::hex,
 				   ios_base::basefield)
   oct				setf(ios_base::oct,
 				   ios_base::basefield)
   fixed				setf(ios_base::fixed,
 				   ios_base::floatfield)
   scientific			setf(ios_base::scientific,
 				   ios_base::floatfield)
   resetiosflags
    (ios_base::fmtflags flag)	setf(0,flag)
   setiosflags
   (ios_base::fmtflags flag)	setf(flag)
   setbase(int base)		See above
   setfill(char_type c)		fill(c)
   setprecision(int n)		precision(n)
   setw(int n)			width(n)
   endl
   ends
   flush				flush( )

 DESCRIPTION

   showpos   Generates a	+ sign in non-negative generated numeric output.

   showbase   Generates a prefix	indicating the numeric base of generated
 	     integer output.

   uppercase   Replaces certain lowercase letters with their uppercase
 	      equivalents in generated output.

   showpoint   Generates	a decimal-point	character unconditionally in
               generated floating-point output.

   boolalpha   Insert and extract bool type in alphabetic format.

   unitbuf   Flushes output after each output operation.

   internal   Adds fill characters at a designated internal point in
              certain generated output, or identical to right if	no
              such	point is designated.

   left	 Adds fill characters on the right (final positions) of	certain
          generated	output.

   right	  Adds fill characters on the left (initial positions) of
           certain generated output.

   dec	Converts integer input or generates integer output in decimal
         base.

   hex	Converts integer input or generates integer output in hexadecimal
 	base.

   oct	Converts integer input or generates integer output in octal base.

   fixed	  Generates floating-point output in fixed-point notation.

   scientific   Generates floating-point	output in scientific notation.

   resetiosflagss

   (ios_base::fmtflags flag)   Resets the fmtflags field	flag.

   setiosflags

   (ios_base::fmtflags flag)   Sets up the flag flag.

   setbase(int base)   Converts integer input or	generates integer
                       output in base base. The parameter base can
                       be 8, 10 or 16.

   setfill(char_type c)	 Sets the character used to pad	(fill) an output
 			 conversion to the specified field width.

   setprecision(int n)	Set the	precision (number of digits after the
                         decimal point) to generate on certain output
                         conversions.

   setw(int n)	Sets the field with (number of characters) to generate on
 		certain	output conversions

   endl	 Inserts a newline character into the output sequence and flush
     	 the output	buffer.

   ends	 Inserts a null	character into the output sequence.

   flush	  Flush	the output buffer.

 DEFAULT	VALUES

   precision()		 6
   width()		 0
   fill()		 the space character
   flags()		 skipws	| dec
   getloc()		 locale::locale()

 EXAMPLES

   //
   // cout example one
   //
   #include<iostream>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    int i;
    float f;

     // read an integer and a float from	stdin
    cin >> i >> f;

     // output the integer and goes at the line
    cout	<< i <<	endl;

     // output the float	and goes at the	line
    cout	<< f <<	endl;

     // output i	in hexa
    cout	<< hex << i << endl;

     // output i	in octal and then in decimal
    cout	<< oct << i << dec << i	<< endl;

     // output i	preceded by its	sign
    cout	<< showpos << i	<< endl;

     // output i	in hexa
    cout	<< setbase(16) << i << endl;

     // output i	in dec and pad to the left with	character
     // @ until a width of 20
     // if you input 45 it outputs 45@@@@@@@@@@@@@@@@@@
    cout	<< setfill('@')	<< setw(20) << left << dec << i;
    cout	<< endl;

     // output the same result as the code just above
     // but uses	member functions rather	than manipulators
    cout.fill('@');
    cout.width(20);
    cout.setf(ios_base::left, ios_base::adjustfield);
    cout.setf(ios_base::dec, ios_base::basefield);
    cout	<< i <<	endl;

     // outputs f in scientific notation	with
     // a precision of 10 digits
    cout	<< scientific << setprecision(10) << f << endl;

     // change the precision to 6 digits
     // equivalents to cout << setprecision(6);
    cout.precision(6);

     // output f	and goes back to fixed notation
    cout	<< f <<	fixed << endl;

   }

   //
   // cout example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    char	p[50];

    cin.getline(p,50);

    cout	<< p;
   }

   //
   // cout example three
   //
   #include <iostream>
   #include <fstream>

   void main ( )
   {
    using namespace std;

     // open the	file "file_name.txt"
     // for reading
    ifstream in("file_name.txt");

     // output the all file to stdout
    if (	in )
      cout << in.rdbuf();
    else
       {
        cout << "Error while opening the	file";
        cout << endl;
       }
   }

 WARNINGS

   Keep in mind that the	manipulator endl flushes the stream buffer.
   Therefore it is	recommended to use '0 if your only intent is
   to	go at the line.	It will greatly improve performance when
   C and C++ streams are not synchronized.

 SEE ALSO

   basic_ostream, iostream, basic_filebuf,
   cin,	cerr, clog, wcin, wcout,
   wcerr, wclog, iomanip

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  18 - ctype

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   ctype, ctype<char> - A facet that provides character classification
   facilities.	(The description for ctype<char>, a specialization of
   ctype, follows the ctype description.)

 SYNOPSIS

   #include <locale>
   class	ctype_base;
   template <class charT> class ctype;

 SPECIALIZATION

   class	ctype<char>;

 DESCRIPTION

   ctype<charT>	is the character classification	facet.	This facet
   provides facilities for classifying characters	and performing
   simple conversions. ctype<charT>	provides conversions for upper
   to lower	and lower to upper case.	 The facet also
   provides conversions between charT, and	char. ctype<charT>
   relies on ctype_base for a set of masks	that identify the
   various classes of characters.  These	classes	are:

   space

   print

   cntrl

   upper

   lower

   alpha

   digit

   punct

   xdigit

   alnum

   graph

   The masks are	passed to member functions of ctype in order to	obtain
   verify the classifications of a character or	range of characters.

 INTERFACE

   class	ctype_base {
   public:
    enum	mask {
      space, print, cntrl, upper, lower,
      alpha, digit, punct, xdigit,
      alnum=alpha|digit,	graph=alnum|punct
     };
   };

   template <class charT>
   class	ctype :	public locale::facet, public ctype_base	{
    public:
      typedef charT char_type;
      explicit ctype(size_t);
      bool	  is(mask, charT) const;
      const charT* is(const charT*,
 		     const charT*, mask*) const;
      const charT* scan_is(mask,
 			  const	charT*,
 			  const	charT*)	const;
      const charT* scan_not(mask,
 			   const charT*,
 			   const charT*) const;
      charT	  toupper(charT) const;
      const charT* toupper(charT*, const	charT*)	const;
      charT	  tolower(charT) const;
      const charT* tolower(charT*, const	charT*)	const;
      charT	  widen(char) const;
      const char*  widen(const char*,
 		      const char*, charT*) const;
      char	  narrow(charT,	char) const;
      const charT* narrow(const charT*, const charT*,
 			 char, char*) const;
      static locale::id id;

    protected:
        ~ctype();  // virtual
      virtual bool	  do_is(mask, charT) const;
      virtual const charT* do_is(const charT*,
 				const charT*,
 				mask*) const;
      virtual const charT* do_scan_is(mask,
 				     const charT*,
 				     const charT*) const;
      virtual const charT* do_scan_not(mask,
 				      const charT*,
 				      const charT*) const;
      virtual charT	  do_toupper(charT) const;
      virtual const charT* do_toupper(charT*,
 				     const charT*) const;
      virtual charT	  do_tolower(charT) const;
      virtual const charT* do_tolower(charT*,
 				     const charT*) const;
      virtual charT	  do_widen(char) const;
      virtual const char*  do_widen(const char*,
 				   const char*,
 				   charT*) const;
      virtual char	  do_narrow(charT, char) const;
      virtual const charT* do_narrow(const charT*,
 				    const charT*,
 				    char, char*) const;
   };

 TYPE

   char_type
      Type of character the facet is instantiated on.

 CONSTRUCTOR AND	DESTRUCTOR

   explicit ctype(size_t	refs = 0)
      Construct a ctype facet.  If the refs argument is 0 then
      destruction of the object	is delegated to	the locale, or
      locales,	containing it. This allows the	user to	ignore
      lifetime	management issues.  On the other had, if	refs
      is 1 then	the object must	be explicitly deleted; the locale will
      not do so.  In this case, the	object can be maintained
      across	the lifetime of multiple locales.

   ~ctype();  //	virtual	and protected
      Destroy the facet.

 PUBLIC MEMBER FUNCTIONS

   The public members of	the ctype facet	provide	an interface to
   protected members.  Each public	member xxx has a corresponding
   virtual protected member do_xxx.  All work is delagated	to
   these protected members.   For instance, the	public widen function
   simply calls its protected cousin do_widen.

   bool
   is(mask m, charT c) const;
   const	charT*

   is(const charT* low,
     const charT* high, mask* vec) const;
      Returns do_is(m,c)	or do_is(low,high,vec).

   char
   narrow(charT c, char dfault) const;
   const	charT*
   narrow(const charT* low, const charT*, char dfault,
 	char* to) const;
      Returns do_narrow(c,dfault) or do_narrow(low,high,dfault,to).

   const	charT*
   scan_is(mask m, const	charT*,	const charT* high) const;
      Returns do_scan_is(m,low,high).

   const	charT*
   scan_not(mask	m, const charT*	low, const charT* high)	const;
      Returns do_scan_not(m,low,high).

   charT
   tolower(charT	c) const;
   const	charT*
   tolower(charT* low, const charT* high) const;
      Returns do_tolower(c) or do_tolower(low,high).

   charT
   toupper(charT) const;
   const	charT*
   toupper(charT* low, const charT* high) const;
      Returns do_toupper(c) or do_toupper(low,high).

   charT
   widen(char c)	const;
   const	char*
   widen(const char* low, const char* high, charT* to) const;
      Returns do_widen(c) or do_widen(low,high,to).

 FACET ID

   static locale::id id;
      Unique identifier for this	type of	facet.

 PROTECTED MEMBER FUNCTIONS

   virtual bool
   do_is(mask m,	charT c) const;
      Returns true if c matches the classification indicated by the
      mask	m, where m is	one of the values available from
      ctype_base.  For instance, the following call	returns	true
      since 'a' is an alphabetic	character:

        ctype<char>().is(ctype_base::alpha,'a');

      See ctype_base  for a description of the masks.

   virtual const	charT*
   do_is(const charT* low, const	charT* high,
        mask* vec) const;
      Fills vec with every mask from ctype_base that applies to the
      range of characters	indicated by [low,high).   See
      ctype_base  for a description of	the masks.  For	instance,
      after	the following call v would contain {alpha, lower,
      print,alnum	,graph}:

        char a[]	= "abcde";
        ctype_base::mask	v[12];
        ctype<char>().is(a,a+5,v);

      This function returns high.

   virtual char
   do_narrow(charT, char	dfault)	const;
      Returns the appropriate char representation for c,	if such
      exists.	 Otherwise do_narrow returns dfault.

   virtual const	charT*
   do_narrow(const charT* low, const charT* high,
 	   char	dfault,	char* dest) const;
      Converts each character in	the range [low,high) to	its char
      representation, if such exists.  If a char representation is
      not available then the character will	be converted to
      dfault.	Returns	high.

   virtual const	charT*
   do_scan_is(mask m, const charT* low, const charT* high) const;
      Finds the first character in the range [low,high) that matches
      the	classification	indicated by the mask m.

   virtual const	charT*
   do_scan_not(mask m, const charT* low,	const charT* high) const;
      Finds the first character in the range [low,high) that does not
      match the classification	indicated by the mask m.

   virtual charT
   do_tolower(charT) const;
      Returns the lower case representation of c, if such exists,
      otherwise returns c;

   virtual const	charT*
   do_tolower(charT* low, const charT* high) const;
      Converts each character in	the range [low,high) to	its lower case
      representation, if	such exists.  If a lower case representation
      does not exist then	the character is not changed.  Returns
      high.

   virtual charT
   do_toupper(charT c) const;
      Returns the upper case representation of c, if such exists,
      otherwise returns c;

   virtual const	charT*
   do_toupper(charT* low, const charT* high) const;
      Converts each character in	the range [low,high) to	its upper case
      representation, if	such exists.  If an upper case representation
      does not exist then the	character is not changed.  Returns
      high.

   virtual charT
   do_widen(char	c) const;
      Returns the appropriate charT representation for c.

   virtual const	char*
   do_widen(const char* low, const char*	high,charT* dest) const;
      Converts each character in	the range [low,high) to	its charT
      representation. Returns high.

 EXAMPLE

   //
   // ctype.cpp
   //

   #include <iostream>

   int main ()
   {
    using namespace std;

    locale loc;
    string s1("blues Power");

     // Get a reference to the ctype<char> facet
    const ctype<char>& ct =
   #ifndef _RWSTD_NO_TEMPLATE_ON_RETURN_TYPE
        use_facet<ctype<char> >(loc);
   #else
        use_facet(loc,(ctype<char>*)0);
   #endif

     // Check the classification	of the 'a' character
    cout	<< ct.is(ctype_base::alpha,'a')	<< endl;
    cout	<< ct.is(ctype_base::punct,'a')	<< endl;

     // Scan for	the first upper	case character
    cout	<< (char)*(ct.scan_is(ctype_base::upper,
 			   s1.begin(),s1.end())) << endl;

     // Convert characters to upper case
    ct.toupper(s1.begin(),s1.end());
    cout	<< s1 << endl;

    return 0;
   }

 SEE ALSO

   locale, facets, collate, ctype<char>,	ctype_byname

 NAME

   ctype<char> -	A specialization of the	ctype facet.

 SYNOPSIS

   #include <locale>

   class	ctype<char>;

 DESCRIPTION

   This specialization of the ctype<charT>  template provides inline
   versions of ctype's member functions.	The facet provides the same
   public interface, and uses the same set	of masks, as the ctype
   template.

 INTERFACE

   template <>
   class	ctype<char> : public locale::facet, public ctype_base {
    public:
      typedef char char_type;
      explicit ctype(const mask*	= 0, bool = false,
 		    size_t = 0);
      bool	  is(mask, char) const;
      const charT* is(const char*,
 		     const char*, mask*) const;
      const charT* scan_is(mask,
 			  const	char*,
 			  const	char*) const;
      const charT* scan_not(mask,
 			   const char*,
 			   const char*)	const;
      charT	  toupper(char)	const;
      const charT* toupper(char*, const charT*) const;
      charT	  tolower(char)	const;
      const charT* tolower(char*, const char*) const;
      charT	  widen(char) const;
      const char*  widen(const char*,
 		      const char*, char*) const;
      char	  narrow(char, char) const;
      const charT* narrow(const char*, const char*,
 			 char, char*) const;
      static locale::id id;
      static const size_t table_size = 256;

    protected:
      const mask* table() const throw();
      static const mask*	classic_table()	throw();

   ~ctype();  //	virtual
      virtual charT	  do_toupper(charT) const;
      virtual const charT* do_toupper(charT*,
 				     const charT*) const;
      virtual charT	  do_tolower(charT) const;
      virtual const charT* do_tolower(charT*,
 				     const charT*) const;
   };

 TYPE

   char_type
      Type of character the facet is instantiated on.

 CONSTRUCTORS AND DESTRUCTORS

   explicit ctype(const mask* tbl = 0, bool del = false,
 		size_t refs = 0)
      Construct a ctype facet. The three	parameters set up the
      following	conditions:

      +	     The tbl argument must be either 0 or an array of at least
 	  table_size elements.	 If tbl	is non zero then the supplied
           table will be used for character classification.

      +	     If	tbl is non zero, and del is true then the tbl array will
           be deleted by the destructor, so	the calling program need
           not concern itself with the lifetime of the facet.

      +	     If	the refs argument is 0 then destruction	of the object
           itself is delegated to the locale, or locales, containing it.
           This allows the user to ignore lifetime management issues.  On
           the other had, if refs  is 1	then the object	must be	explicitly
           deleted; the locale will not do so.  In this case,	the object
           can be maintained across the lifetime of multiple locales.

   ~ctype();  //	virtual	and protected
      Destroy the facet.	 If the	constructor was	called with a non-zero
      tbl argumentand a true	del argument, then the array supplied
      by the tbl argument will be deleted

 PUBLIC MEMBER FUNCTIONS

   The public members of	the ctype<char>	facet specialization do	not
   all	serve the same purpose as the functions in the template.  In
   many cases these functions implement functionality, rather than just
   forwarding a call	to a protected implementation function.

   static const mask*
   classic_table() throw();
      Returns a pointer to a table_size character array that represents
      the classifications of	characters in the "C" locale.

   bool
   is(mask m, charT c) const;
      Determines	if the character c has the classification indicated by
      the mask  m.  Returns table()[(unsigned char)c]  &  m.

   const	charT*
   is(const charT* low,
     const charT* high, mask* vec) const;
      Fills vec with every mask from ctype_base that applies to the
      range of characters	indicated by [low,high).   See
      ctype_base  for a description of	the masks.  For	instance,
      after	the following call v would contain {alpha, lower,
      print,,alnum ,graph}:

        char a[]	= "abcde";
        ctype_base::mask	v[12];
        ctype<char>().do_is(a,a+5,v);

      This function returns high.

   char
   narrow(charT c, char dfault) const;
      Returns  c.

   const	charT*
   narrow(const charT* low, const charT*, char dfault,
 	char* to) const;
      Performs ::memcpy(to,low,high-low).  Returns high.

   const	charT*
   scan_is(mask m, const	charT*,	const charT* high) const;
      Finds the first character in the range [low,high) that matches
      the	classification	indicated by the mask m. The
      classification is matched by checking for table()[(unsigned char)
      p] & m, where	p is in	the range [low,high).  Returns the
      first p that matches, or high if none do.

   const	charT*
   scan_not(mask	m, const charT*	low, const charT* high)	const;
      Finds the first character in the range [low,high) that does not
      match the classification	indicated by the mask m.   The
      classification is matched by	checking for
      !(table()[(unsigned char) p] & m),	where p	is in the range
      [low,high).  Returns the	first p	that matches, or high if none
      do.

   const	mask*
   table() const	throw();
      If	the tbl	argument that was passed to the	constructor was
      non-zero, then this function	returns	that argument,
      otherwise it returns classic_table().

   charT
   tolower(charT	c) const;
   const	charT*
   tolower(charT* low, const charT* high) const;
      Returns do_tolower(c) or do_tolower(low,high).

   charT
   toupper(charT) const;
   const	charT*
   toupper(charT* low, const charT* high) const;
      Returns do_toupper(c) or do_toupper(low,high).

   charT
   widen(char c)	const;
      Returns c.

   const	char*
   widen(const char* low, const char* high, charT* to) const;
      Performs ::memcpy(to,low,high-low.	Returns	high.

 FACET ID

   static locale::id id;
      Unique identifier for this	type of	facet.

 PROTECTED MEMBER FUNCTIONS

   virtual charT
   do_tolower(charT) const;
      Returns the lower case representation of c, if such exists,
      otherwise returns c;

   virtual const	charT*
   do_tolower(charT* low, const charT* high) const;
      Converts each character in	the range [low,high) to	its lower case
      representation, if	such exists.  If a lower case representation
      does not exist then	the character is not changed.  Returns
      high.

   virtual charT
   do_toupper(charT c) const;
      Returns the upper case representation of c, if such exists,
      otherwise returns c;

   virtual const	charT*
   do_toupper(charT* low, const charT* high) const;
      Converts each character in	the range [low,high) to	its upper case
      representation, if	such exists.  If an upper case representation
      does not exist then the	character is not changed.  Returns
      high.

 SEE ALSO

   locale, facets, collate, ctype<char>,	ctype_byname

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  19 - filebuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_filebuf,filebuf

   This page describes the ANSI basic_filebuf class.  If	you would like
   information on the	pre-ANSI filebuf class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_filebuf
   : public basic_streambuf<charT, traits>

 DESCRIPTION

   The template class basic_filebuf is derived from basic_streambuf.
   It	associates the input or output sequence with a file. Each
   object of type basic_filebuf<charT, traits> controls	two character
   sequences:

   +	  a character input sequence

   +	  a character output sequence

   The restrictions on reading  and writing a sequence controlled by an
   object of class basic_filebuf<charT,traits> are the same as for
   reading and writing with the Standard	C library files.

   If the file is not open for reading the input	sequence cannot	be
   read. If the file is not open for writing the output sequence cannot
   be written. A joint	file position is maintained for	both the input
   and output sequences.

   A file provides byte sequences. So the basic_filebuf	class treats a
   file as the external source (or sink) byte	sequence. In order to
   provide the contents of a	file as	wide character sequences, a
   wide-oriented file buffer called wfilebuf converts wide
   character sequences to multibytes character sequences (and vice
   versa) according to the current locale being used	in the stream
   buffer.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_filebuf
   : public basic_streambuf<charT, traits> {

   public:

    typedef traits			traits_type;
    typedef charT			char_type;
    typedef typename traits::int_type	int_type;
    typedef typename traits::pos_type	pos_type;
    typedef typename traits::off_type	off_type;

    basic_filebuf();
    basic_filebuf(int fd);

    virtual ~basic_filebuf();

    bool	is_open() const;

    basic_filebuf<charT,	traits>* open(const char *s,
 				      ios_base::openmode,
 				      long protection =	0666);

    basic_filebuf<charT,	traits>* open(int fd);

    basic_filebuf<charT,	traits>* close();

   protected:

    virtual int	    showmanyc();

    virtual int_type overflow(int_type c	= traits::eof());

    virtual int_type pbackfail(int_type c = traits::eof());

    virtual int_type underflow();

    virtual basic_streambuf<charT,traits>*
      setbuf(char_type *s,streamsize n);

    virtual pos_type seekoff(off_type off,
 			    ios_base::seekdir way,
 			    ios_base::openmode which =
 			    ios_base::in | ios_base::out);

    virtual pos_type seekpos(pos_type sp,
 			    ios_base::openmode which =
 			    ios_base::in | ios_base::out);

    virtual int sync();

    virtual streamsize xsputn(const char_type* s, streamsize n);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   filebuf
      The type filebuf is an instantiation of class basic_filebuf on type
      char:

        typedef basic_filebuf<char> filebuf;

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wfilebuf
      The type wfilebuf is an instantiation of class basic_filebuf on type
      wchar_t:

        typedef basic_filebuf<wchar_t> wfilebuf;

 CONSTRUCTORS

   basic_filebuf();
      Constructs	an object of class basic_filebuf<charT,traits>,
      initializing the base class with basic_streambuf<charT,traits>().

   basic_filebuf(int fd);
      Constructs	an object of class basic_filebuf<charT,traits>,
      initializing the base class with basic_streambuf<charT,traits>(),
      then calls open(fd). This function is	not described in the
      C++ standard, and is provided as an extension in order to
      manipulate pipes, sockets or other UNIX devices, that	can be
      accessed	through	file descriptors.

 DESTRUCTOR

   virtual ~basic_filebuf();
      Calls close() and destroys	the object.

 MEMBER FUNCTIONS

   basic_filebuf<charT,traits>*
   close();
      If	is_open() == false, returns a null pointer. Otherwise, closes the
      file, and returns *this.

   bool
   is_open() const;
      Returns true if the associated file is open.

   basic_filebuf<charT,traits>*
   open(const char* s, ios_base::openmode mode, long protection = 0666);
      If	is_open() == true, returns a null pointer.  Otherwise opens
      the	file, whose name	is stored in the
      null-terminated byte-string s.	 The file open modes	are
      given by their C-equivalent	description (see the C func-
      tion fopen):

      in			     "w"
      in|binary		     "rb"
      out		     "w"
      out|app		     "a"
      out|binary		     "wb"
      out|binary|app	     "ab"
      out|in		     "r+"
      out|in|app		     "a+"
      out|in|binary	     "r+b"
      out|in|binary|app	     "a+b"
      trunc|out		     "w"
      trunc|out|binary	     "wb"
      trunc|out|in	     "w+"
      trunc|out|in|binary     "w+b"

      The third argument, protection, is	used as	the file permission.
      It	does not appear	in the Standard	C++ description	of the
      function	open and is provided as an extension. It determines
      the file read/write/execute permissions under UNIX.  It is more
      limited under DOS	since files are always readable and do not
      have special execute permission. If the	open function fails,
      it	returns	a null pointer.

   basic_filebuf<charT,traits>*
   open(int fd);
      Attaches the file previously opened and identified	by its file
      descriptor fd, to	the basic_filebuf object. This
      function	is not described in the C++ standard, and is provided
      as an extension in order	to manipulate pipes, sockets or other
      UNIX devices, that	can be accessed	through	file descriptors.

   int_type
   overflow(int_type c =	traits::eof() );
      If	the output sequence has	a put position available, and c	is not
      traits::eof(), then write c into it. If there is no position
      available, the function output the content of	the buffer to
      the associated file and then write	c at the new current put
      position. If the operation fails, the function returns
      traits::eof(). Otherwise it returns traits::not_eof(c). In wide
      characters file buffer, overflow converts the internal wide
      characters to their external multibytes representation by	using
      the locale::codecvt facet	located	in the locale object imbued in
      the stream buffer.

   int_type
   pbackfail(int_type c = traits::eof() );
      Puts back the character designated	by c into the input sequence.
      If traits::eq_int_type(c,traits::eof()) returns true,	move
      the input sequence one position backward. If	the operation
      fails, the function returns traits::eof(). Otherwise it returns
      traits::not_eof(c).

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,	  ios_base::openmode
   which = ios_base::in | ios_base::out);
      If	the open mode is in | out, alters the stream position of both
      the input and the output sequence. If the open	mode is	in,
      alters the stream position of only the input	sequence, and
      if it is out, alters the stream position of only the output
      sequence. The new position is calculated by combining the two
      parameters off (displacement) and way (reference point). If
      the current position of	the sequence is	invalid	before repo-
      sitioning,	the operation fails and	the return value is
      pos_type(off_type(-1)). Otherwise the function returns the
      current	new position. File buffers using locale::codecvt facet
      performing state dependent conversion, only	support
      seeking	to the beginning of the	file, to	the current
      position, or to a position previously obtained by a	call
      to	one of the iostreams seeking functions.

   pos_type
   seekpos(pos_type sp,ios_base::openmode      which = ios_base::in |
   ios_base::out);
      If	the open mode is in | out, alters the stream position of both
      the input and the output sequence. If the open	mode is	in,
      alters the stream position of only the input	sequence, and
      if it is out, alters the stream position of only the output
      sequence. If the current position of the sequence is invalid
      before	repositioning, the operation fails and the return
      value is pos_type(off_type(-1)). Otherwise the function returns
      the current new position. File buffers using locale::codecvt
      facet	performing state dependent conversion, only support
      seeking to the beginning of the file, to the current position,
      or to a	position previously obtained by a call	to one of the
      iostreams	seeking	functions.

   basic_filebuf<charT,traits>*
   setbuf(char_type*s, streamsize n);
      If	s is not a null	pointer, output	the content of the current
      buffer to the associated file, then delete the current buffer and
      replace it	by s. Otherwise resize the current buffer to size n
      after outputting its	content to the associated file if
      necessary.

   int
   sync();
      Synchronizes the content of the external file, with its image
      maintained in	memory by the file buffer. If the function
      fails, it returns -1, otherwise it returns 0.

   int_type
   underflow();
      If	the input sequence has a read position available, returns the
      content of	this position. Otherwise fills up the buffer by
      reading	characters from the associated file and if it
      succeeds, returns the content of the new current position. The
      function	returns	traits::eof() to indicate failure. In wide
      characters file buffer, underflow	converts the external
      mutltibytes characters to their wide character representation by
      using the locale::codecvt facet located in the locale object
      imbued in the stream buffer.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. The function returns the
      number of characters written.

 EXAMPLES

   //
   // stdlib/examples/manual/filebuf.cpp
   //
   #include<iostream>
   #include<fstream>
   void main ( )
   {
    using namespace std;
     // create a	read/write file-stream object on tiny char
     // and attach it to	the file "filebuf.out"
    ofstream out("filebuf.out",ios_base::in |	       ios_base::out);
     // tie the istream object to the ofstream object
    istream in(out.rdbuf());
     // output to out
    out << "Il errait comme un ame en peine";
     // seek to the beginning of	the file
    in.seekg(0);
     // output in to the	standard output
    cout	<< in.rdbuf() << endl;
     // close the file "filebuf.out"
    out.close();
     // open the	existing file "filebuf.out"
     // and truncate it
    out.open("filebuf.out",ios_base::in |       ios_base::out |
    ios_base::trunc);
     // set the buffer size
    out.rdbuf()->pubsetbuf(0,4096);
     // open the	source code file
    ifstream ins("filebuf.cpp");
     //output it	to filebuf.out
    out << ins.rdbuf();
     // seek to the beginning of	the file
    out.seekp(0);
     // output the all file to the standard output
    cout	<< out.rdbuf();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_ifstream, basic_ofstream,
   basic_fstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.8.1.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  20 - fpos

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   fpos

 SYNOPSIS

   #include <rw/iotraits>
   template<class stateT	= mbstate_t>
   class	fpos

 DESCRIPTION

   The template class fpos<stateT> is used by the iostream classes to
   maintain positioning information. It maintains	three kinds of
   information:  the absolute position, the conversion state and the
   validity of the stored position. Streams instantiated on tiny
   characters use	streampos as their positioning type, whereas
   streams instantiated on wide characters use wstreampos, but both are
   defined as fpos<mbstate_t>.

 INTERFACE

   template <class stateT = mbstate_t>
   class	fpos {

   public:

    typedef stateT  state_type;

    fpos(long off = 0);
    fpos(state_type);

    state_type	state(state_type);
    state_type	state () const;

   };

 TYPES

   state_type
      The type state_type holds the conversion state, and is compatible
      with the function locale::codecvt(). By	default	it is defined
      as mbstate_t.

 PUBLIC CONSTRUCTORS

   fpos(long off	=0);
      Constructs	an fpos	object,	initializing its position with off and
      its conversion	state with the default stateT constructor.
      This	function is not described in the C++ standard.

   fpos(state_type st);
      Construct an fpos object, initializing its	conversion state with
      st, its position with the start position, and its status to good.

 PUBLIC MEMBER FUNCTIONS

   state_type
   state() const;
      Returns the conversion state stored in the	fpos object.

   state_type
   state(state_type st);
      Store st as the new conversion state in the fpos object and
      return	its previous value.

 VALID OPERATIONS

   In the following,

   +	  P refers to type fpos<stateT>

   +	  p and	q refer	to an value of type fpos<stateT>

   +	  O refers to the offset type (	streamoff, wstreamoff, long _)

   +	  o refers to a	value of the offset type

   +	  i refers to a	value of type int

   Valid	operations:

   P p( i );    Constructs from int.

   P p =	i;   Assigns from int.

   P( o )   Converts from offset.

   O( p )   Converts to offset.

   p == q   Tests for equality.

   p != q   Tests for inequality.

   q = p	+ o   Adds offset.

   p += o   Adds	offset.

   q = p	-o   Subtracts offset.

   q -= o   Subtracts offset.

   o = p	- q   Returns offset.

 SEE ALSO

   iosfwd, char_traits

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.4.

   Amendment 1 to the C Standard.

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  21 - fstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_fstream,fstream,ofstream

   This page describes the ANSI basic_fstream class.  If	you would like
   information on the	pre-ANSI fstream class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_fstream
   : public basic_iostream<charT, traits>

 DESCRIPTION

   The template class basic_fstream<charT,traits> supports reading and
   writing to named files or other devices associated with a file
   descriptor. It	uses a basic_filebuf object to control the
   associated sequences. It inherits from basic_iostream and can
   therefore	use all	the formatted and unformatted input	and
   output functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_fstream
   : public basic_iostream<charT, traits> {

   public:

    typedef basic_ios<charT, traits>   ios_type;

    typedef charT		       char_type;
    typedef traits		       traits_type;
    typedef typename traits::int_type  int_type;
    typedef typename traits::pos_type  pos_type;
    typedef typename traits::off_type  off_type;

    basic_fstream();

    explicit basic_fstream(const	char *s, ios_base::openmode
 			  mode = ios_base::in |	ios_base::out,
 			  long protection = 0666);

    explicit basic_fstream(int fd);

    basic_fstream(int fd, char_type *buf, int len);

    virtual ~basic_fstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_base::in | ios_base::out,
 	     long protection = 0666);

    void	close();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   fstream
      The type fstream is an instantiation of class basic_fstream on type
      char:

        typedef basic_fstream<char> fstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wfstream
      The type wfstream is an instantiation of class basic_fstream  on
      type wchar_t:

        typedef basic_fstream<wchar_t> wfstream;

 CONSTRUCTORS

   basic_fstream();
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction,
      a file can be attached to the basic_ftream object by using the
      open() member function.

   basic_fstream(const char* s,
 	       ios_base::openmode mode=
 	       ios_base::in | iosw_base::out,
 	       long protection=	0666);
     Constructs an	object of class	basic_fstream<charT,traits>,
     initializing the base	class basic_iostream with the associ-
     ated file buffer, which is initialized by calling the
     basic_filebuf	constructor basic_filebuf<charT,traits>().
     The constructor then calls the open function
     open(s,mode,protection) in order to attach the file, whose
     name is pointed at by	s, to the basic_ftream object. The
     third	argument, protection, is used as the file permission.
     It does not appear in	the Standard C++ description and is
     provided as an extension. It determines the file
     read/write/execute permissions under UNIX.  It is more lim-
     ited under DOS since files are always	readable and do	not
     have special execute permission.

   explicit basic_fstream(int fd);
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_ftream object. This
      constructor	is not described in the C++ standard, and
      is provided as an extension in order to	manipulate pipes,
      sockets or other UNIX	devices, that can be accessed through
      file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_fstream(int fd,	char_type* buf,int len);
      Constructs	an object of class basic_fstream<charT,traits>,
      initializing the base class basic_iostream with	the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_ftream object. The
      underlying buffer is	then replaced by calling the
      basic_filebuf member function, setbuf(), with parameters	buf
      and	len. This constructor is not described in the C++
      standard, and is provided as an extension in order	to manipulate
      pipes, sockets, or other UNIX devices that can be	accessed
      through file descriptors. It also maintains compatibility with
      the old iostreams library. If the function fails, it	sets
      ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_fstream();
      Destroys an object	of class basic_fstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this
      function fails, it calls the basic_ios member function
      setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return
      its result.

   void
   open(const char* s,ios_base::openmode	=
       ios_base::out | ios_base::in,
       long protection =	0666);
       Calls the associated basic_filebuf function open(s,mode,protection)
       and, if this function fails at	opening	the file, calls	the basic_ios
       member	function setstate(failbit). The	third argument protection is
       used as the file permissions. It does not appear in the Standard C++
       description and is provided as	an extension. It determines the	file
       read/write/execute permissions	under UNIX. It is more limited under
       DOS since files are always readable and do not	have special execute
       permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the	stream.

 EXAMPLES

   //
   // stdlib/examples/manual/fstream.cpp
   //
   #include<iostream>
   #include<bidirec>
   void main ( )
   {
      using namespace std;

       // create	a bi-directional fstream object
      fstream inout("fstream.out");

       // output	characters
      inout << "Das ist die rede	von einem man" << endl;
      inout << "C'est l'histoire	d'un home" << endl;
      inout << "This is the story of a man" << endl;

      char p[100];

       // seek back to the beginning of the file
      inout.seekg(0);

       // extract the first line
      inout.getline(p,100);

       // output	the first line to stdout
      cout << endl << "Deutch :"	<< endl;
      cout << p;

      fstream::pos_type pos = inout.tellg();

       // extract the seconf line
      inout.getline(p,100);

       // output	the second line	to stdout
      cout << endl << "Francais :" << endl;
      cout << p;

       // extract the third line
      inout.getline(p,100);

       // output	the third line to stdout
      cout << endl << "English :" << endl;
      cout << p;

       // move the put sequence before the second line
      inout.seekp(pos);

       // replace the second line
      inout << "This is the story of a man" << endl;

       // replace the third line
      inout << "C'est l'histoire	d'un home";

       // seek to the beginning of the file
      inout.seekg(0);

       // output	the all	content	of the fstream object to stdout
      cout << endl << endl << inout.rdbuf();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ifstream, basic_ofstream

   Working Paper	for Draft Proposed International Standard for Information
   Systems--Programming Language	C++, Section 27.8.1.11

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  22 - ifstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ifstream,fstream

   This page describes the ANSI basic_ifstream class.  If you would
   like information on the pre-ANSI ifstream class, use the command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ifstream
   : public basic_istream<charT,	traits>

 DESCRIPTION

   The template class basic_ifstream<charT,traits> supports reading
   from	named files	or other devices associated with a file
   descriptor. It uses a basic_filebuf	object to control the
   associated sequences.  It	inherits from basic_istream	and
   can	therefore use all the formatted	and unformatted	input
   functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ifstream
   : public basic_istream<charT,	traits>	{

   public:

    typedef basic_ios<charT, traits>    ios_type;

    typedef traits		       traits_type;
    typedef charT		       char_type;
    typedef typename traits::int_type   int_type;
    typedef typename traits::pos_type   pos_type;
    typedef typename traits::off_type   off_type;

    basic_ifstream();

    explicit basic_ifstream(const char *s,
 			   ios_base::openmode mode =
 			   ios_base::in,
 			   long	protection = 0666);

    explicit basic_ifstream(int fd);

    basic_ifstream(int fd, char_type* buf, int len);

    virtual ~basic_ifstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_base::in, long	protection = 0666);

    void	close();

   };

 TYPES

   char_type

   The type char_type	is a synonym for the template parameter	charT.

   ifstream
      The type ifstream is an instantiation of class basic_ifstream on
      type char:

        typedef basic_ifstream<char> ifstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wifstream
      The type wifstream	is an instantiation of class basic_ifstream on
      type wchar_t:

        typedef basic_ifstream<wchar_t> wifstream;

 CONSTRUCTORS

   basic_ifstream();
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction,
      a file can be attached to the basic_iftream object by using the
      open member function.

   basic_ifstream(const char* s,
 		ios_base::openmode mode= ios_base::in,
 		long protection= 0666);
 	Constructs an object	of class
 	basic_ifstream<charT,traits>, initializing the base class
 	basic_istream with the associated file buffer, which	is
 	initialized by calling the basic_filebuf constructor
 	basic_filebuf<charT,traits>(). The constructor then calls
 	the open function open(s,mode,protection) in	order to
 	attach the file whose name is pointed at by s, to the
 	basic_iftream object. The third argument protection pro-
 	vides file permissions. It does not appear in the Standard
 	C++ description and is provided as an extension. It deter-
 	mines the file read/write/execute permissions under UNIX.
 	It is more limited under DOS	since files are	always read-
 	able	and do not have	special	execute	permission.

   explicit basic_ifstream(int fd);
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_iftream	object.	This
      constructor is not described in the C++ standard, and	is
      provided as an extension in order to	manipulate pipes,
      sockets or other UNIX	devices, that can be accessed through
      file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_ifstream(int fd, char_type* buf,int len);
      Constructs	an object of class basic_ifstream<charT,traits>,
      initializing the base class basic_istream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). The	constructor
      then calls the basic_filebuf open	function open(fd) in order to
      attach the file descriptor	fd to the basic_iftream	object.	The
      underlying buffer is then replaced by calling the basic_filebuf
      member function setbuf with parameters buf and len.	This
      constructor is not	described in the C++ standard, and is
      provided as an extension in order to manipulate pipes, sockets or
      other UNIX devices, that can be	accessed through file
      descriptors. It also maintains compatibility with the old
      iostreams library. If the function fails, it	sets
      ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_ifstream();
      Destroys an object	of class basic_ifstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this
      function fails, it calls the basic_ios member function
      setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return
      its result.

   void
   open(const char* s,ios_base::openmode	=
       ios_base::in, long protection = 0666);
      Calls the associated basic_filebuf function
      open(s,mode,protection). If this function fails	opening	the
      file, it calls the basic_ios member	function
      setstate(failbit). The	third argument protection provides
      file	permissions. It	does not appear	in the Standard	C++
      description and is provided as	an extension. It determines
      the	file read/write/execute permissions	under UNIX. It
      is more limited under DOS since files are always readable and do
      not	have special execute permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the
      stream.

 EXAMPLES

   //
   // stdlib/examples/manual/ifstream.cpp
   //
   #include<iostream>
   #include<fstream>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    long	  l= 20;
    char	  *ntbs="Le minot passait la piece a frotter";
    char	  c;
    char	  buf[50];

   try {

     // create a	read/write file-stream object on char
     // and attach it to	an ifstream object
    ifstream in("ifstream.out",ios_base::in |
 	       ios_base::out | ios_base::trunc);

     // tie the ostream object to the ifstream object
    ostream out(in.rdbuf());

     // output ntbs in out
    out << ntbs << endl;

     // seek to the beginning of	the file
    in.seekg(0);

     // output each word	on a separate line
    while ( in.get(c) )
      {
       if ( char_traits<char>::eq(c,' ')	)
        cout << endl;
       else
        cout << c;
      }
    cout	<< endl	<< endl;

     // move back to the	beginning of the file
    in.seekg(0);

     // clear the state flags
    in.clear();

     // does the	same thing as the previous code
     // output each word	on a separate line
    while ( in >> buf )
     cout << buf	<< endl;

    cout	<< endl	<< endl;

     // output the base info before each	integer
    out << showbase;

    ostream::pos_type pos= out.tellp();

     // output l	in hex with a field with of 20
    out << hex << setw(20) << l << endl;

     // output l	in oct with a field with of 20
    out << oct << setw(20) << l << endl;

     // output l	in dec with a field with of 20
    out << dec << setw(20) << l << endl;

     // move back to the	beginning of the file
    in.seekg(0);

     // output the all file
    cout	<< in.rdbuf();

     // clear the flags
    in.clear();

     // seek the	input sequence to pos
    in.seekg(pos);

    int a,b,d;

     // read the	previous outputted integer
    in >> a >> b	>> d;

     // output 3	times 20
    cout	<< a <<	endl <<	b << endl << d << endl;

   }
    catch( ios_base::failure& var )
      {
        cout << var.what();
      }

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ofstream, basic_fstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.8.1.5

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  23 - ios

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ios,ios

   This page describes the ANSI ios class.  If you would	like
   information on the pre-ANSI ios class, use the command:

        help cxxl

 SYNOPSIS

   #include <ios>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ios : public ios_base

 DESCRIPTION

   The class basic_ios is a base	class that provides the	common
   functionality required by all streams. It maintains	state
   information that reflects	the integrity of the stream and stream
   buffer. It	also maintains the link between the stream classes and
   the stream buffers classes via	the rdbuf member functions.
   Classes derived from basic_ios specialize operations for input, and
   output.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ios : public ios_base {

     public:

      typedef basic_ios<charT, traits>		ios_type;
      typedef basic_streambuf<charT, traits>	streambuf_type;
      typedef basic_ostream<charT, traits>	ostream_type;

      typedef typename traits::char_type		char_type;
      typedef traits				traits_type;

      typedef typename traits::int_type		int_type;
      typedef typename traits::off_type		off_type;
      typedef typename traits::pos_type		pos_type;

      explicit basic_ios(basic_streambuf<charT, traits> *sb_arg);
      virtual ~basic_ios();

      char_type fill() const;
      char_type fill(char_type ch);

      void exceptions(iostate except);
      iostate exceptions() const;

      void clear(iostate	state =	goodbit);

      void setstate(iostate state);
      iostate rdstate() const;

      operator void*() const;
      bool operator!() const;

      bool good() const;
      bool eof()	const;
      bool fail() const;
      bool bad()	const;

      ios_type& copyfmt(const ios_type& rhs);

      ostream_type *tie() const;
      ostream_type *tie(ostream_type *tie_arg);

      streambuf_type *rdbuf() const;
      streambuf_type *rdbuf( streambuf_type *sb);

      locale imbue(const	locale&	loc);

      char narrow(charT,	char) const;
      charT widen(char) const;

     protected:

      basic_ios();

      void init(basic_streambuf<charT, traits> *sb);
   };

 TYPES

   char_type
      The type char_type	is a synonym of	type traits::char_type.

   ios
      The type ios is an	instantiation of basic_ios on char:

        typedef basic_ios<char> ios;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits>.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostream_type
      The type ostream_type is a	synonym	for basic_ostream<charT, traits>.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf_type
      The type streambuf_type is	a synonym for
      basic_streambuf<charT, traits>.

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wios
      The type wios is an instantiation of basic_ios on wchar_t:

        typedef basic_ios<wchar_t> wios;

 PUBLIC CONSTRUCTORS

   explicit basic_ios(basic_streambuf<charT, traits>* sb);
      Constructs	an object of class basic_ios, assigning	initial	values
      to its member objects by calling init(sb). If sb is a null
      pointer, the stream is	positioned in error state, by
      triggering its badbit.

   basic_ios();
      Constructs	an object of class basic_ios leaving its member
      objects	uninitialized.	The object must	be initialized
      by calling the init member function before using it.

 PUBLIC DESTRUCTOR

   virtual ~basic_ios();
      Destroys an object	of class basic_ios.

 PUBLIC MEMBER FUNCTIONS

   bool
   bad()	const;
      Returns true if badbit is set in rdstate().

   void
   clear(iostate	state =	goodbit);
      If	(state & exception()) == 0, returns.  Otherwise, the function
      throws an	object of class	ios_base::failure. After the call
      returns state	== rdstate().

   basic_ios&
   copyfmt(const	basic_ios& rhs);
      Assigns to	the member objects of *this the	corresponding member
      objects of	rhs, with the following	exceptions:

      +	     rdstate() and rdbuf() are left unchanged

      +	     calls ios_base::copyfmt

      +	     exceptions() is altered last by calling
        	     exceptions(rhs.exceptions())

   bool
   eof()	const;
      Returns true if eofbit is set in rdstate().

   iostate
   exceptions() const;
      Returns a mask that determines what elements set in rdstate()
      cause exceptions	to be thrown.

   void
   exceptions(iostate except);
      Set the exception mask to except then calls clear(rdstate()).

   bool
   fail() const;
      Returns true if failbit or	badbit is set in rdstate().

   char_type
   fill() const;
      Returns the character used	to pad (fill) an output	conversion to
      the specified field width.

   char_type
   fill(char_type fillch);
      Saves the field width value then replaces it by fillch and
      returns	the previously	saved value.

   bool
   good() const;
      Returns rdstate() == 0.

   locale
   imbue(const locale& loc);
      Saves the value returned by getloc() then assigns loc to a
      private	variable and if rdbuf() != 0 calls
      rdbuf()->pubimbue(loc) and returns the previously	saved value.

   void
   init(basic_streambuf<charT,traits>* sb);
      Performs the following initialization:

      rdbuf()	  sb
      tie()	  0
      rdstate()	  goodbit if sb	is not null otherwise badbit
      exceptions() goodbit
      flags()	  skipws | dec
      width()	  0
      precision()  6
      fill()	  the space character
      getloc()	  locale::locale()

   char
   narrow(charT c, char dfault) const;
      Uses the stream's locale to convert the wide character c to a
      tiny	character, and	then returns it. If no
      conversion exists, it returns the character dfault.

   bool
   operator!() const;
      Returns fail() ? 1	: 0;

   streambuf_type*
   rdbuf() const;
      Returns a pointer to the stream buffer associated with the
      stream.

   streambuf_type*
   rdbuf(streambuf_type*	sb);
      Associates	a stream buffer	with the stream. All the input and
      output will be directed to this stream buffer. If	sb is a	null
      pointer, the stream is positioned in error state, by triggering
      its badbit.

   iostate
   rdstate() const;
      Returns the control state of the stream.

   void
   setstate(iostate state);
      Calls clear(rdstate() | state).

   ostream_type*
   tie()	const;
      Returns an	output sequence	that is	tied to	(synchronized with)
      the sequence controlled by the	stream buffer.

   ostream_type*
   tie(ostream_type* tiestr);
      Saves the tie() value then	replaces it by tiestr and returns the
      value previously	saved.

   operator
   void*() const;
      Returns fail() ? 0	: 1;

   charT
   widen(char c)	const;

      Uses the stream's locale to convert the tiny character c to a
      wide	character, then returns it.

 SEE ALSO

   ios_base, basic_istream, basic_ostream,
   basic_streambuf, char_traits

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++.

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  24 - iosfwd

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   iosfwd

 DESCRIPTION

   The header iosfwd forward declares the input/output library template
   classes and specializes them for wide	and tiny characters. It	also
   defines the positional types used in class char_traits instantiated
   on tiny and wide characters.

 SYNOPSIS

   #include <iosfwd>

   // forward declare the traits	class
   template<class charT>	struct char_traits;

   // forward declare the positioning class
   template<class stateT> class fpos;

   // forward declare the state class
   class	mbstate_t;

   // forward declare the allocator class
   template<class T> class allocator;

   // forward declare the iostreams template classes
   template<class charT,class traits=char_traits<charT>>
      class basic_ios;
   template<class charT,class traits=char_traits<charT>>
      class basic_streambuf;
   template<class charT,class traits=char_traits<charT>>
      class basic_istream;
   template<class charT,class traits=char_traits<charT>>
      class basic_ostream;
   template<class charT,class traits=char_traits<charT>,
 	  class	Allocator = allocator<void> >
      class basic_stringbuf;
   template<class charT,class traits=char_traits<charT>,
 	  class	Allocator = allocator<void> >
      class basic_istringstream;
   template<class charT,class traits=char_traits<charT>,
 	  class	Allocator = allocator<void> >
      class basic_ostringstream;
   template<class charT,class traits=char_traits<charT>>
      class basic_filebuf;
   template<class charT,class traits=char_traits<charT>>
      class basic_ifstream;
   template<class charT,class traits=char_traits<charT>>
      class basic_ofstream;
   template<class charT,class traits=char_traits<charT>>
      class ostreambuf_iterator;
   template<class charT,class traits=char_traits<charT>>
      class istreambuf_iterator;
   template<class charT,class traits=char_traits<charT>>
      class basic_iostream;
   template<class charT,class traits=char_traits<charT>,
 	  class	Allocator = allocator<void> >
      class basic_stringstream;
   template<class charT,class traits=char_traits<charT>>
      class basic_fstream;

   // specializations on	tiny characters
   typedef basic_ios<char>	       ios;
   typedef basic_streambuf<char>	       streambuf;
   typedef basic_istream<char>	       istream;
   typedef basic_ostream<char>	       ostream;
   typedef basic_stringbuf<char>	       stringbuf;
   typedef basic_istringstream<char>    istringstream;
   typedef basic_ostringstream<char>    ostringstream;
   typedef basic_filebuf<char>	       filebuf;
   typedef basic_ifstream<char>	       ifstream;
   typedef basic_ofstream<char>	       ofstream;
   typedef basic_iostream<char>	       iostream;
   typedef basic_stringstream<char>     stringstream;
   typedef basic_fstream<char>	       fstream;

   // specializations on	wide characters
   typedef basic_ios<wchar_t>	       wios;
   typedef basic_streambuf<wchar_t>     wstreambuf;
   typedef basic_istream<wchar_t>       wistream;
   typedef basic_ostream<wchar_t>       wostream;
   typedef basic_stringbuf<wchar_t>     wstringbuf;
   typedef basic_istringstream<wchar_t> wistringstream;
   typedef basic_ostringstream<wchar_t> wostringstream;
   typedef basic_filebuf<wchar_t>       wfilebuf;
   typedef basic_ifstream<wchar_t>      wifstream;
   typedef basic_ofstream<wchar_t>      wofstream;
   typedef basic_iostream<wchar_t>      wiostream;
   typedef basic_stringstream<wchar_t>  wstringstream;
   typedef basic_fstream<wchar_t>       wfstream;

   // positional	types used by char_traits
   typedef fpos<mbstate_t> streampos;
   typedef fpos<mbstate_t> wstreampos;

   typedef long		  streamoff;
   typedef long		  wstreamoff;

 SEE ALSO

   fpos, char_traits, basic_ios,
   basic_streambuf, basic_istream, basic_ostream,
   basic_iostream,

   basic_stringbuf, basic_istringstream,
   basic_ostringstream,	basic_stringstream,
   basic_filebuf, basic_ifstream, basic_ofstream,
   basic_fstream, istreambuf_iterator,
   ostreambuf_iterator

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.2

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  25 - istream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_istream,istream

   This page describes the ANSI basic_istream class.  If	you would like
   information on the	pre-ANSI istream class,	use the	command:

        help cxxl

 SYNOPSIS

   #include <istream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_istream
   : virtual public basic_ios<charT, traits>

 DESCRIPTION

   The class basic_istream defines a number of member function
   signatures that assist in reading and	interpreting input from
   sequences controlled by	a stream buffer.

   Two groups of	member function	signatures share common	properties:
   the formatted input functions (or extractors) and the unformatted
   input functions. Both groups of input functions obtain	(or
   extract) input characters by calling basic_streambuf member
   functions. They both begin by constructing an object of class
   basic_istream::sentry	and, if	this object is in good state after
   construction, the function endeavors to	obtain the requested
   input. The sentry object performs exception safe initialization,
   such as controlling the status of the stream	or locking it
   in multithread environment.

   Some formatted input functions parse characters extracted from the
   input sequence, converting the result to a value of	some scalar
   data type, and storing the converted	value in an object of that
   scalar type.	The conversion behavior	is locale dependent,
   and directly depend on the	locale object imbued in the
   stream.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_istream
   : virtual public basic_ios<charT, traits> {

   public:

   typedef basic_istream<charT, traits>	  istream_type;
   typedef basic_ios<charT, traits>	  ios_type;
   typedef basic_streambuf<charT, traits>  streambuf_type;

   typedef traits		      traits_type;
   typedef charT			      char_type;
   typedef typename traits::int_type   int_type;
   typedef typename traits::pos_type   pos_type;
   typedef typename traits::off_type   off_type;

   explicit basic_istream(basic_streambuf<charT,	traits>	*sb);
   virtual ~basic_istream();

   class	sentry
     {
       public:

        inline explicit sentry(basic_istream<charT,traits>&,
 			      bool noskipws = 0);
 	 ~sentry();
 	operator bool ();
     };

   istream_type&	operator>>(istream_type& (*pf)(istream_type&));
   istream_type&	operator>>(ios_base& (*pf)(ios_base&));
   istream_type&	operator>>(ios_type& (*pf)(ios_type&));

   istream_type&	operator>>(bool& n);
   istream_type&	operator>>(short& n);
   istream_type&	operator>>(unsigned short& n);
   istream_type&	operator>>(int&	n);
   istream_type&	operator>>(unsigned int& n);
   istream_type&	operator>>(long& n);
   istream_type&	operator>>(unsigned long& n);
   istream_type&	operator>>(float& f);
   istream_type&	operator>>(double& f);
   istream_type&	operator>>(long	double&	f);

   istream_type&	operator>>(void*& p);

   istream_type&	operator>>(streambuf_type& sb);
   istream_type&	operator>>(streambuf_type *sb);

   int_type get();

   istream_type&	get(char_type *s, streamsize n,	char_type delim);
   istream_type&	get(char_type *s, streamsize n);

   istream_type&	get(char_type& c);

   istream_type&	get(streambuf_type& sb,char_type delim);
   istream_type&	get(streambuf_type& sb);

   istream_type&	getline(char_type *s, streamsize n,char_type delim);
   istream_type&	getline(char_type *s, streamsize n);

   istream_type&	ignore(streamsize n = 1,
 		       int_type	delim =	traits::eof());

   istream_type&	read(char_type *s, streamsize n);

   streamsize readsome(char_type	*s, streamsize n);

   int peek();

   pos_type tellg();

   istream_type&	seekg(pos_type&);
   istream_type&	seekg(off_type&, ios_base::seekdir);

   istream_type&	putback(char_type c);
   istream_type&	unget();

   streamsize gcount() const;

   int sync();

   protected:

   explicit basic_istream( );

   };

   //global function

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   ws(basic_istream<charT, traits>&);
   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>> (basic_istream<charT, traits>&, charT&);
   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>> (basic_istream<charT, traits>&, charT*);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, unsigned char&);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, signed char&);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, unsigned char*);
   template<class traits>
   basic_istream<char, traits>&
   operator>> (basic_istream<char, traits>&, signed char*);

 TYPES

   char_type
      The type char_type	is a synonym for them template parameter charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits> .

   istream
      The type istream is an instantiation of class basic_istream on type
      char:

        typedef basic_istream<char> istream;

   istream_type
      The type istream_type is a	synonym	for basic_istream<charT, traits>.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf_type
      The type streambuf_type is	a synonym for basic_streambuf<charT,
      traits> .

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wistream
      The type wistream is an instantiation of class basic_istream on type
      wchar_t:

      typedef basic_istream<wchar_t> wistream;

 PUBLIC CONSTRUCTOR

   explicit basic_istream(basic_streambuf<charT,	traits>* sb);
      Constructs	an object of class basic_istream, assigning initial
      values to the base class by calling basic_ios::init(sb).

 PUBLIC DESTRUCTOR

   virtual ~basic_istream();
      Destroys an object	of class basic_istream.

 SENTRY CLASS

   explicit sentry(basic_istream<charT,traits>&,	bool noskipws=0);
      Prepares for formatted or unformatted input. First	if the
      basic_ios member function tie() is not a null pointer, the
      function synchronizes the output	sequence with any associated
      stream. If	noskipws is zero and the ios_base member function
      flags() & skipws is nonzero, the function extracts and discards
      each	character as long as the next available	input
      character is a white space	character. If after any	preparation is
      completed the	basic_ios member function good() is true, the
      sentry conversion function operator bool() will	return true.
      Otherwise it will return false. In multithread environment the
      sentry object constructor is responsible for locking the stream
      and the	stream buffer associated with the stream.

   ~sentry();
      Destroys an object	of class sentry. In multithread	environment,
      the sentry object	destructor is responsible for
      unlocking	the stream and the stream buffer associated with the
      stream.

   operator bool();
      If	after any preparation is completed the basic_ios member
      function good() is true, the sentry	conversion function
      operator bool() will return true else it will return false.

 EXTRACTORS

   istream_type&
   operator>>(istream_type&
 	    (*pf) (istream_type&));
 	       Calls pf(*this),	then return *this. See,	for example, the
 	       function	signature ws(basic_istream&).

   istream_type&
   operator>>(ios_type& (*pf) (ios_type&));
      Calls pf(*this), then return *this.

   istream_type&
   operator>>(ios_base& (*pf) (ios_base&));
      Calls pf(*this), then return *this. See, for example, the
      function	signature dec(ios_base&).

   istream_type&
   operator>>(bool& n);
      Converts a	Boolean	value, if one is available, and	stores it in
      n.	If the ios_base member function flag() & ios_base::boolalpha
      is false	it tries to read an integer value, which if found must
      be 0 or 1. If the boolalpha flag is true, it	reads
      characters until it determines whether the characters read are
      correct according to the locale function numpunct<>::truename()
      or numpunct<>::falsename().	If no match is found, it
      calls the basic_ios member function setstate(failbit), which may
      throw ios_base::failure.

   istream_type&
   operator>>(short& n);
      Converts a	signed short integer, if one is	available, and stores
      it in n,	then returns *this.

   istream_type&
   operator>>(unsigned short& n);
      Converts an unsigned short	integer, if one	is available, and
      stores it in	n, then	return *this.

   istream_type&
   operator>>(int& n);
      Converts a	signed integer,	if one is available, and stores	it in
      n, then return *this.

   istream_type&
   operator>>(unsigned int& n);
      Converts an unsigned integer, if one is available,	and stores it
      in n, then return *this.

   istream_type&
   operator>>(long& n);
      Converts a	signed long integer, if	one is available, and stores
      it	in n, then returns *this.

   istream_type&
   operator>>(unsigned long& n);
      Converts an unsigned long integer,	if one is available, and
      stores	it in n,	then returns *this.

   istream_type&
   operator>>(float& f);
      Converts a	float, if one is available, and	stores it in f,	then
      returns *this.

   istream_type&
   operator>>(double& f);
      Converts a	double,	if one is available, and stores	it in f, then
      returns *this.

   istream_type&
   operator>>(long double& f);
      Converts a	long double, if	one is available, and stores it	in f,
      then returns *this.

   istream_type&
   operator>>(void*& p);
      Extracts a	void pointer, if one is	available, and stores it in p,
      then return *this.

   istream_type&
   operator>>(streambuf_type* sb);
      If	sb is null, calls the basic_ios	member function
      setstate(badbit), which may throw ios_base::failure.
      Otherwise extracts characters from *this and inserts them in the
      output sequence controlled by sb. Characters are extracted
      and inserted until any of the following	occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

   istream_type&
   operator>>(streambuf_type& sb);
      Extracts characters from *this and	inserts	them in	the output
      sequence controlled	by sb. Characters are extracted	and
      inserted until any of the following occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

 UNFORMATTED FUNCTIONS

   streamsize
   gcount() const;
      Returns the number	of characters extracted	by the last
      unformatted	input member function called.

   int_type
   get();
      Extracts a	character, if one is available.	Otherwise, the
      function	calls the basic_ios member function setstate(failbit),
      which may	throw ios_base::failure.	Returns	the character
      extracted	or traits::eof() if none is available.

   istream_type&
   get(char_type& c);
      Extracts a	character, if one is available,	and assigns it to c.
      Otherwise, the function	calls the basic_ios member function
      setstate(failbit),	which may throw	ios_base::failure.

   istream_type&
   get(char_type* s, streamsize n,char_type delim);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n-1 characters are	stored

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it stores a null character into
      the next successive location	of the array.

   istream_type&
   get(char_type* s, streamsize n);
      Calls get(s,n,widen('0)).

   istream_type&
   get(streambuf_type& sb,char_type delim);
      Extracts characters and inserts them in the output	sequence
      controlled by	sb. Characters are extracted and inserted
      until	any of the following occurs:

      +	     end-of-file occurs	on the input sequence

      +	     inserting in the output sequence fails

      +	     the next available	input character	== delim.

      +	     an	exception occurs

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. If failure was due to	catching an exception
      thrown while extracting characters from sb and failbit is on in
      exception(), then the caught exception is	rethrown.

   istream_type&
   get(streambuf_type& sb);
      Calls get(sb,widen('0)).

   istream_type&
   getline(char_type* s,	streamsize n, char_type	delim);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n-1 characters are	stored

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it stores a null character into
      the next successive location	of the array.

   istream_type&
   getline(char_type* s,	streamsize n);
      Calls getline(s,n,widen('0)).

   istream_type&
   ignore(streamsize n=1, int_type delim=traits::eof());
      Extracts characters and discards them. Characters are extracted
      until any of the	following occurs:

      +	     n characters are extracted

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	== delim.

   int_type
   peek();
      Returns traits::eof() if the basic_ios member function good()
      returns false. Otherwise, returns the next	available character.
      Does not increment the current get pointer.

   istream_type&
   putback(char_type c);
      Insert c in the putback sequence.

   istream_type&
   read(char_type* s, streamsize	n);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. Characters
      are extracted and stored	until any of the following occurs:

      +	     n characters are stored

      +	     end-of-file occurs	on the input sequence

      If	the function does not store n characters, it calls the
      basic_ios member function setstate(failbit),	which may
      throw	ios_base::failure.

   streamsize
   readsome(char_type* s, streamsize n);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. If
      rdbuf()->in_avail() == -1, calls the basic_ios member function
      setstate(eofbit).

      +	     If	rdbuf()->in_avail() == 0, extracts no characters

      +	     If	rdbuf()->in_avail() > 0, extracts min( rdbuf()->in_avail(),
 	  n)

      In	any case the function returns the number of characters extracted.

   istream_type&
   seekg(pos_type& pos);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(pos), which will position the current pointer
      of the input sequence at the position designated by pos.

   istream_type&
   seekg(off_type& off, ios_base::seekdir dir);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(off,dir), which will position the current
      pointer of the input sequence	at the position	designated by
      off and dir.

   int
   sync();
      If	rdbuf()	is a null pointer, return -1. Otherwise, calls
      rdbuf()- >pubsync()	and if that function returns -1	calls
      the basic_ios member function setstate(badbit).	The purpose of
      this function is	to synchronize the internal input buffer,
      with the external sequence of characters.

   pos_type
   tellg();
      If	the basic_ios member function fail() returns true, tellg()
      returns pos_type(off_type(-1)) to indicate	failure. Otherwise it
      returns the current position of the input sequence by calling
      rdbuf()- >pubseekoff(0,cur,in).

   istream_type&
   unget();
      If	rdbuf()	is not null, calls rdbuf()->sungetc(). If rdbuf() is
      null or if	sungetc() returns traits::eof(), calls the basic_ios
      member function setstate(badbit).

 NON MEMBER FUNCTIONS

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>>(basic_istream<charT, traits>& is, charT& c);
      Extracts a	character if one is available, and stores it in	c.
      Otherwise the function calls	the basic_ios member function
      setstate(failbit), which may throw ios_base::failure.

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   operator>>(basic_istream<charT, traits>& is, charT* s);
      Extracts characters and stores them into successive locations of
      an array whose first element is designated by	s. If the
      ios_base member function is.width() is greater than zero, then
      is.width() is the maximum number of characters stored. Characters
      are extracted and stored until any of the	following occurs:

      +	     if	is.witdh()>0, is.witdh()-1 characters are extracted

      +	     end-of-file occurs	on the input sequence

      +	     the next available	input character	is a white space.

      If	the function stores no characters, it calls the	basic_ios
      member function setstate(failbit), which may throw
      ios_base::failure. In any case, it then stores a null character
      into	the next successive location of	the array and calls
      width(0).

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, unsigned char& c);
      Returns is	>> (char&)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, signed char& c);
      Returns is	>> (char&)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, unsigned char* c);
      Returns is	>> (char*)c.

   Template<class traits>
   basic_istream<char, traits>&
   operator>>(basic_istream<char, traits>& is, signed char* c);
      Returns is	>> (char*)c.

   template<class charT,	class traits>
   basic_istream<charT, traits>&
   ws(basic_istream<charT, traits>& is);
      Skips any white space in the input	sequence and returns is.

 EXAMPLES

   //
   // stdlib/examples/manual/istream1.cpp
   //
   #include<iostream>
   #include<istream>
   #include<fstream>

   void main ( )
   {
    using namespace std;

    float f= 3.14159;
    int	 i= 3;
    char	 s[200];

     // open a file for read and	write operations
    ofstream out("example", ios_base::in	| ios_base::out
 		 | ios_base::trunc);

     // tie the istream object to the ofstream filebuf
    istream  in (out.rdbuf());

     // output to the file
    out << "Annie is the	Queen of porting" << endl;
    out << f << endl;
    out << i << endl;

     // seek to the beginning of	the file
    in.seekg(0);

    f = i = 0;

     // read from the file using	formatted functions
    in >> s >> f	>> i;

     // seek to the beginning of	the file
    in.seekg(0,ios_base::beg);

     // output the all file to the standard output
    cout	<< in.rdbuf();

     // seek to the beginning of	the file
    in.seekg(0);

     // read the	first line in the file
     // "Annie is the Queen of porting"
    in.getline(s,100);

    cout	<< s <<	endl;

     // read the	second line in the file
     // 3.14159
    in.getline(s,100);

    cout	<< s <<	endl;

     // seek to the beginning of	the file
    in.seekg(0);

     // read the	first line in the file
     // "Annie is the Queen of porting"
    in.get(s,100);

     // remove the newline character
    in.ignore();

    cout	<< s <<	endl;

     // read the	second line in the file
     // 3.14159
    in.get(s,100);

    cout	<< s <<	endl;

     // remove the newline character
    in.ignore();

     // store the current file position
    istream::pos_type position =	in.tellg();

    out << "replace the int" << endl;

     // move back to the	previous saved position
    in.seekg(position);

     // output the remain of the	file
     // "replace	the int"
     // this is equivalent to
     // cout << in.rdbuf();
    while( !char_traits<char>::eq_int_type(in.peek(),
    char_traits<char>::eof()) )
     cout << char_traits<char>::to_char_type(in.get());

    cout	<< "0 << flush;
   }

   //
   // istream example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    char	p[50];

     // remove all the white spaces
    cin >> ws;

     // read characters from stdin until	a newline
     // or 49 characters	have been read
    cin.getline(p,50);

     // output the result to stdout
    cout	<< p;
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_iostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  26 - iostream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_iostream,iostream

   This page describes the ANSI basic_iostream class.  If you would
   like information on the pre-ANSI iostream class, use the command:

        help cxxl

 SYNOPSIS

   #include <istream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_iostream
   : public basic_istream<charT,	traits>,
   public basic_ostream<charT, traits>

 DESCRIPTION

   The class basic_iostream inherits a number of	functions from classes
   basic_ostream<charT, traits> and basic_istream<charT,	traits>. They
   assist in formatting	and interpreting sequences of characters
   controlled by a stream buffer. Two groups of functions share common
   properties, the formatted functions	and the	unformatted functions.

 INTERFACE

   template<class charT,	class traits>
   class	basic_iostream
   : public basic_istream<charT,	traits>,
    public basic_ostream<charT, traits>

   {

   public:

    explicit basic_iostream(basic_streambuf<charT, traits> *sb);
    virtual ~basic_iostream();

   protected:

    explicit basic_iostream();

   };

 PUBLIC CONSTRUCTORS

   explicit basic_iostream(basic_streambuf<charT, traits>* sb);
      Constructs	an object of class basic_iostream, assigning initial
      values to	the base class by calling basic_istream<charT,
      traits>(sb) and basic_ostream<charT, traits>(sb).

   explicit basic_iostream();
      Constructs	an object of class basic_iostream, assigning initial
      values to	the base class by calling basic_istream<charT,
      traits>() and basic_ostream<charT, traits>(). After construction
      the object has its badbit set.

 DESTRUCTOR

   virtual ~basic_iostream();
      Destroys an object	of class basic_iostream.

 EXAMPLES

   See basic_istream and	basic_ostream examples.

 COMPATIBILITY

   [Digital]  The ANSI Standard Library provides	two macros which
   enable	or disable use of the ANSI iostream package at compile
   time.

   ______________________________________________________________
   Macro			  Description
   ______________________________________________________________
   __USE_STD_IOSTREAM	  Use the ANSI Standard	iostream package
   __NO_USE_STD_IOSTREAM	  Use the pre-ANSI iostream package
   ______________________________________________________________

   See help cxxl for more details.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_istream, basic_ostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section
   27.6.1.4.1

 STANDARDS CONFORMANCE

   ANSI X3J16/ISO WG21 Joint C++	Committee

  27 - ios_base

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   ios_base

 SYNOPSIS

   #include <ios>
   class	ios_base;

 DESCRIPTION

   The class ios_base defines several member types:

   +	  A class failure derived from exception.

   +	  A class Init.

   +	  Three	bitmask	types, fmtflags, iostate and openmode.

   +	  Two enumerated types,	seekdir, and event.

   It maintains several kinds of	data:

   +	  Control information that influences how to interpret (format)
        input sequences and how to generate (format) output sequences.

   +	  Locale object	used within the	stream classes.

   +	  Additional information that is stored	by the program for its
        private use.

 INTERFACE

   class	ios_base {

   public:

     class failure : public exception {

        public:

 	   explicit failure(const string& msg);
 	   virtual ~failure() throw();
 	   virtual const char* what() const throw();
       };

     typedef int	     iostate;

     enum io_state {
 		    goodbit	= 0x00,
 		    badbit	= 0x01,
 		    eofbit	= 0x02,
 		    failbit	= 0x04
 		   };

     typedef int	     openmode;

     enum open_mode {
 		     app	 = 0x01,
 		     binary	 = 0x02,
 		     in		 = 0x04,
 		     out	 = 0x08,
 		     trunc	 = 0x10,
 		     ate	 = 0x20
 		    };

     typedef int	     seekdir;

     enum seek_dir {
 		      beg	  = 0x0,
 		      cur	  = 0x1,
 		      end	  = 0x2
 		   };

     typedef int	     fmtflags;

     enum fmt_flags {
 		     boolalpha	 = 0x0001,
 		     dec	 = 0x0002,
 		     fixed	 = 0x0004,
 		     hex	 = 0x0008,
 		     internal	 = 0x0010,
 		     left	 = 0x0020,
 		     oct	 = 0x0040,
 		     right	 = 0x0080,
 		     scientific	 = 0x0100,
 		     showbase	 = 0x0200,
 		     showpoint	 = 0x0400,
 		     showpos	 = 0x0800,
 		     skipws	 = 0x1000,
 		     unitbuf	 = 0x2000,
 		     uppercase	 = 0x4000,
 		     adjustfield = left	| right	| internal,
 		     basefield	 = dec | oct | hex,
 		     floatfield	 = scientific |	fixed
 		    };

     enum event	   {
 		     erase_event   = 0x0001,
 		     imbue_event   = 0x0002,
 		     copyfmt_event = 0x004
 		    };

     typedef void (*event_callback) (event, ios_base&, int index);

     void register_callback(event_callback fn, int index);

     class Init;

     fmtflags flags() const;
     fmtflags flags(fmtflags fmtfl);
     fmtflags setf(fmtflags fmtfl);
     fmtflags setf(fmtflags fmtfl, fmtflags mask);

     void unsetf(fmtflags mask);

     ios_base& copyfmt(const ios_base& rhs);

     streamsize precision() const;
     streamsize precision(streamsize prec);

     streamsize width() const;
     streamsize width(streamsize	wide);

     locale imbue(const locale& loc);
     locale getloc() const

     static int xalloc();

     long&  iword(int index);
     void*& pword(int index);

     bool synch_with_stdio(bool sync = true);
     bool is_synch();

    protected:

     ios_base();
      ~ios_base();

    private:

     union ios_user_union {
 			    long  lword;
 			    void* pword;
 			  };

     union ios_user_union *userwords_;
   };

   ios_base& boolalpha(ios_base&);
   ios_base& noboolalpha(ios_base&);
   ios_base& showbase(ios_base&);
   ios_base& noshowbase(ios_base&);
   ios_base& showpoint(ios_base&);
   ios_base& noshowpoint(ios_base&);
   ios_base& showpos(ios_base&);
   ios_base& noshowpos(ios_base&);
   ios_base& skipws(ios_base&);
   ios_base& noskipws(ios_base&);
   ios_base& uppercase(ios_base&);
   ios_base& nouppercase(ios_base&);
   ios_base& internal(ios_base&);
   ios_base& left(ios_base&);
   ios_base& right(ios_base&);
   ios_base& dec(ios_base&);
   ios_base& hex(ios_base&);
   ios_base& oct(ios_base&);
   ios_base& fixed(ios_base&);
   ios_base& scientific(ios_base&);
   ios_base& unitbuf(ios_base&);
   ios_base& nounitbuf(ios_base&);

 TYPES

   fmtflags
      The type fmtflags is a bitmask type. Setting its elements has the
      following effects:

      showpos   Generates a + sign in non-negative generated numeric
                output.

      showbase	Generates a prefix indicating the numeric base of
                 generated integer	output.

      uppercase	 Replaces certain lowercase letters with their uppercase
 		 equivalents in	generated output.

      showpoint	 Generates a decimal-point character unconditionally in
                  generated	floating-point output.

      boolalpha	 Inserts and extracts bool type	in alphabetic format.

      unitbuf   Flushes output after each output	operation.

      internal	Adds fill characters at	a designated internal point
                 in certain generated output, or identical to right if
                 no such	point is designated.

      left   Adds fill characters on the	right (final positions)	of
             certain generated output.

      right   Adds fill characters on the left (initial positions) of
              certain generated output.

      dec   Converts integer input or generates integer output in decimal
 	   base.

      hex   Converts integer input or generates integer output in
            hexadecimal base.

      oct   Converts integer input or generates integer output in octal
            base.

      fixed   Generates floating-point output in	fixed-point notation.

      scientific	  Generates floating-point output in scientific	notation.

      skipws   Skips leading white space	before certain input operation.

   iostate
      The type iostate is a bitmask type. Setting its elements has the
      following effects:

      badbit   Indicates	a loss of integrity in an input	or output
               sequence.

      eofbit   Indicates	that an	input operation	reached	the end	of an
               input sequence.

      failbit   Indicates that an input operation failed	to read	the
                expected characters, or that an output operation failed
                to generate the desired characters.

   openmode
      The type openmode is a bitmask type. Setting its elements has the
      following effects:

      app   Seeks to the	end before writing.

      ate   Opens and seek to end immediately after opening.

      binary   Performs input and output	in binary mode.

      in	  Opens	for input.

      out   Opens for output.

      trunc   Truncates an existing stream when opening.

   seekdir
      The type seekdir is a bitmask type. Setting its elements has the
      following effects:

      beg   Requests a seek relative to the beginning of	the stream.

      cur   Requests a seek relative to the current position within the
 	   sequence.

      end   Requests a seek relative to the current end of the sequence.

   event_callback
      The type event_callback is	the type of the	callback function used
      as a parameter in the function register_callback. These
      functions allow	you to	use the	iword, pword mechanism in an
      exception-safe environment.

 PUBLIC CONSTRUCTOR

   ios_base();
      The ios_base members have an indeterminate	value after
      construction.

 PUBLIC DESTRUCTOR

   ~ios_base();
      Destroys an object	of class ios_base. Calls each registered
      callback pair (fn, index) as (*fn)(erase_event,*this, index) at
      such a time	that any ios_base member function called from
      within fn	has well-defined results.

 PUBLIC MEMBER FUNCTIONS

   ios_base&
   copyfmt(const	ios_base& rhs);
      Assigns to	the member objects of *this the	corresponding member
      objects of	rhs. The content of the	union pointed at by pword and
      iword is copied, not the pointers itself. Before copying any
      parts of rhs, calls each registered callback pair (fn,index) as
      (*fn)(erase_even,*this, index). After all parts have been
      replaced, calls each callback pair that was copied from rhs as
      (*fn)(copy_event,*this,index).

   fmtflags
   flags() const;
      Returns the format	control	information for	both input and output

   fmtflags
   flags(fmtflags fmtfl);
      Saves the format control information, then	sets it	to fmtfl and
      returns the previously saved value.

   locale
   getloc() const;
      Returns the imbued	locale,	to be used to perform locale-dependent
      input and output	operations. The	default	locale,
      locale::locale(), is used if no	other locale object has	been
      imbued in the stream by a call to the imbue function.

   locale
   imbue(const locale& loc);
      Saves the value returned by getloc() then assigns loc to a
      private	variable and calls each registered callback pair
      (fn, index) as (*fn)(imbue_event,*this, index). It then returns
      the previously saved value.

   bool
   is_sync();
      Returns true if the C++ standard streams and the standard C
      streams are synchronized, otherwise returns false. This function
      is not part of the C++ standard.

   long&
   iword(int idx);
      Returns userwords_[idx].lword. If userwords_ is a null pointer,
      allocates a union of long and void* of	unspecified size and
      stores a pointer to	its first element in  userwords_. The
      function then extends the	union pointed at	by userwords_
      as necessary to include the element userwords_[idx]. Each newly
      allocated element of the union	is initialized to zero. The
      reference returned may become invalid after another call to the
      object's iword	or pword member	with a different index,	after
      a call to its copyfmt member, or when the object is destroyed.

   streamsize
   precision() const;
      Returns the precision (number of digits after the decimal point)
      to generate on certain output conversions.

   streamsize
   precision(streamsize prec);
      Saves the precision then sets it to prec and returns the
      previously saved value.

   void*&
   pword(int idx);
      Returns userword_[idx].pword. If userwords_ is a null pointer,
      allocates a union of	long and void* of unspecified size and
      stores a	pointer	to its first element in userwords_. The
      function then	extends	the union pointed at	by userwords_
      as necessary to include the element userwords_[idx]. Each newly
      allocated element of the array	is initialized to zero. The
      reference returned may become invalid after another call to the
      object's pword	or iword member	with different index, after a
      call to its copyfmt member, or when the object is destroyed.

   void
   register_callback(event_callback fn, int index);
      Registers	the pair (fn, index) such that during calls to
      imbue(),copyfmt(),	or ~ios_base(),	the function fn	is called with
      argument index.  Functions registered are called when an event
      occurs,	in opposite order of registration.  Functions
      registered while a callback function is active	are not	called
      until the next event. Identical pairs are not merged; a function
      registered twice is called twice per event.

   fmtflags
   setf(fmtflags	fmtfl);
      Saves the format control information, then	sets it	to fmtfl and
      returns the previously saved value.

   fmtflags
   setf(fmtflags	fmtfl, fmtflags	mask);
      Saves the control information, then	clears mask in
      flags(),sets fmtfl & mask in flags() and returns the previously
      saved value.

   bool
   sync_with_stdio(bool sync = true);
      Called with a false argument, it allows the C++ standard streams
      to operate independently of the standard C streams, which will
      greatly improve performance when using the	C++ standard streams.
      Called with a true argument it restores the default
      synchronization. The	return value of	the function is	the
      status of the synchronization at the time of the call.

   void
   unsetf(fmtflags mask);
      Clears mask in flags().

   streamsize
   width() const;
      Returns the field width (number of	characters) to generate	on
      certain output conversions.

   streamsize
   width(streamsize wide);
      Saves the field width then	sets it	to wide	and returns the
      previously saved value.

   static int
   xalloc();
      Returns the next static index that	can be used with pword and
      iword. This is useful if you want	to share data between several
      stream objects.

 THE CLASS FAILURE

   The class failure defines the	base class for the types of all
   objects thrown as exceptions,	by functions in	the iostreams library,
   to report errors detected during stream	buffer operations.

   explicit failure(const string& msg);
      Constructs	an object of class failure, initializing the base
      class	with exception(msg).

   const	char*
   what() const;
      Returns the message msg with which	the exception was created.

 CLASS INIT

   The class Init describes an object whose construction	ensures	the
   construction of the eight objects declared in	<iostream>
   that	associate file stream buffers with the standard C streams.

 NON-MEMBER FUNCTIONS

   ios_base&
   boolalpha(ios_base& str);
      Calls str.setf(ios_base::boolalpha) and returns str.

   ios_base&
   dec(ios_base&	str);
      Calls str.setf(ios_base::dec, ios_base::basefield)	and returns
      str.

   ios_base&
   fixed(ios_base& str);
      Calls str.setf(ios_base::fixed, ios_base::floatfield) and returns
      str.

   ios_base&
   hex(ios_base&	str);
      Calls str.setf(ios_base::hex, ios_base::basefield)	and returns str.

   ios_base&
   internal(ios_base& str);
      Calls str.setf(ios_base::internal,	ios_base::adjustfield) and
      returns str.

   ios_base&
   left(ios_base& str);
      Calls str.setf(ios_base::left, ios_base::adjustfield) and returns
      str.

   ios_base&
   noboolalpha(ios_base&	str);
      Calls str.unsetf(ios_base::boolalpha) and returns str.

   ios_base&
   noshowbase(ios_base& str);
      Calls str.unsetf(ios_base::showbase) and returns str.

   ios_base&
   noshowpoint(ios_base&	str);
      Calls str.unsetf(ios_base::showpoint) and returns str.

   ios_base&
   noshowpos(ios_base& str);
      Calls str.unsetf(ios_base::showpos) and returns str.

   ios_base&
   noskipws(ios_base& str);
      Calls str.unsetf(ios_base::skipws)	and returns str.

   ios_base&
   nounitbuf(ios_base& str);
      Calls str.unsetf(ios_base::unitbuf) and returns str.

   ios_base&
   nouppercase(ios_base&	str);
      Calls str.unsetf(ios_base::uppercase) and returns str.

   ios_base&
   oct(ios_base&	str);
      Calls str.setf(ios_base::oct, ios_base::basefield)	and returns str.

   ios_base&
   right(ios_base& str);
      Calls str.setf(ios_base::right, ios_base::adjustfield) and	returns
      str.

   ios_base&
   scientific(ios_base& str);
      Calls str.setf(ios_base::scientific, ios_base::floatfield)	and
      returns str.

   ios_base&
   showbase(ios_base& str);
      Calls str.setf(ios_base::showbase)	and returns str.

   ios_base&
   showpoint(ios_base& str);
      Calls str.setf(ios_base::showpoint) and returns str.

   ios_base&
   showpos(ios_base& str);
      Calls str.setf(ios_base::showpos) and returns str.

   ios_base&
   skipws(ios_base& str);
      Calls str.setf(ios_base::skipws) and returns str.

   ios_base&
   unitbuf(ios_base& str);
      Calls str.setf(ios_base::unitbuf) and returns str.

   ios_base&
   uppercase(ios_base& str);
      Calls str.setf(ios_base::uppercase) and returns str.

 SEE ALSO

   basic_ios, basic_istream, basic_ostream,
   char_traits

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.4.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  28 - istringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_istringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_istringstream
   : public basic_istream<charT,	traits>

 DESCRIPTION

   The template class basic_istringstream<charT,traits,Allocator>
   provides functionality	to read	from an	array in memory. It
   supports reading objects of class
   basic_string<charT,traits,Allocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_istream and therefore	can use	all the	formatted and
   unformatted input	functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_istringstream
   : public basic_istream<charT,	traits>	{

   public:

    typedef basic_stringbuf<charT, traits, Allocator>  sb_type;
    typedef basic_ios<charT, traits>		      ios_type;

    typedef basic_string<charT, traits, Allocator>     string_type;

    typedef traits			    traits_type;
    typedef charT			    char_type;
    typedef typename traits::int_type	    int_type;
    typedef typename traits::pos_type	    pos_type;
    typedef typename traits::off_type	    off_type;

    explicit basic_istringstream(ios_base::openmode which =
 				ios_base::in);

    explicit basic_istringstream(const string_type& str,
 				ios_base::openmode which =
 				ios_base::in);

    virtual ~basic_istringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   istringstream
      The type istringstream is an instantiation	of class
      basic_istringstream on	type char:

        typedef basic_istringstream<char> istringstream;

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf on
      type charT.

   string_type
      The type string_type is an	instantiation of class basic_string on
      type charT.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wistringstream
      The type wistringstream is	an instantiation of class
      basic_istringstream on	type wchar_t:

        typedef basic_istringstream<wchar_t> wistringstream;

 CONSTRUCTORS

   explicit basic_istringstream(ios_base::openmode which	=
 		     ios_base::in);
 	Constructs an object of	class basic_istringstream,
 	initializing the base class basic_istream with the
 	associated string buffer. The string buffer is ini-
 	tialized by calling the	basic_stringbuf	constructor
 	basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_istringstream(const string_type& str,
 		     ios_base::openmode	which =
 		     ios_base::in);
 	Constructs an object of	class basic_istringstream,
 	initializing the base class basic_istream with the
 	associated string buffer. The string buffer is ini-
 	tialized by calling the	basic_stringbuf	constructor
 	basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_istringstream();
      Destroys an object	of class basic_istringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the
      stream.

   string_type
   str()	const;
      Returns a string object of	type string_type, which	contains a
      copy	of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	string buffer and copies the string object str into
      it.	If the opening mode is in, initialize	the input
      sequence to point at the first character of	the buffer. If
      the opening mode	is out,	initialize the output	sequence to
      point at the first character of the	buffer.	If the opening
      mode is out | app, initialize the output sequence to point at
      the last character of the buffer.

 EXAMPLES

   //
   // stdlib/examples/manual/istringstream.cpp
   //
   #include<iostream>
   #include<sstream>
   #include<string>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    long	  l= 20;
    wchar_t *ntbs=L"Il avait l'air heureux";
    wchar_t c;
    wchar_t buf[50];

     // create a	read/write string-stream object	on wide	char
     // and attach it to	an wistringstream object
    wistringstream in(ios_base::in | ios_base::out);

     // tie the ostream object to the wistringstream object
    wostream out(in.rdbuf());

     // output ntbs in out
    out << ntbs;

     // output each word	on a separate line
    while ( in.get(c) )
      {
       if ( c ==	L' ' )
        wcout <<	endl;
       else
        wcout <<	c;
      }
    wcout << endl << endl;

     // move back the input sequence to the beginning
    in.seekg(0);

     // clear the state flags
    in.clear();

     // does the	same thing as the previous code
     // output each word	on a separate line
    while ( in >> buf )
     wcout << buf << endl;

    wcout << endl << endl;

     // create a	tiny string object
    string test_string("Il dormait pour l'eternite");

     // create a	read/write string-stream object	on char
     // and attach it to	an istringstream object
    istringstream in_bis(ios_base:: in |	ios_base::out |
 			ios_base::app );

     // create an ostream object
    ostream out_bis(in_bis.rdbuf());

     // initialize the string buffer with test_string
    in_bis.str(test_string);

    out_bis << endl;

     // output the base info before each	integer
    out_bis << showbase;

    ostream::pos_type pos= out_bis.tellp();

     // output l	in hex with a field with of 20
    out_bis << hex << setw(20) << l << endl;

     // output l	in oct with a field with of 20
    out_bis << oct << setw(20) << l << endl;

     // output l	in dec with a field with of 20
    out_bis << dec << setw(20) << l << endl;

     // output the all buffer
    cout	<< in_bis.rdbuf();

     // seek the	input sequence to pos
    in_bis.seekg(pos);

    int a,b,d;

     // read the	previous outputted integer
    in_bis >> a >> b >> d;

     // output 3	times 20
    cout	<< a <<	endl <<	b << endl << d << endl;

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_ostringstream,	basic_stringstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.2

 STANDARDS CONFORMANC

   ANSI X3J16/ISO WG21 Joint C++	Committee

  29 - istrstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   istrstream

 SYNOPSIS

   #include <strstream>
   class	istrstream
   : public basic_istream<char>

 DESCRIPTION

   The class istrstream provides	functionality to read characters from
   an array	in memory. It uses a private strstreambuf object to
   control the	associated array object. It inherits from
   basic_istream<char> and	therefore can use all the formatted
   and unformatted	input functions.

 INTERFACE

   class	istrstream : public basic_istream<char>	{

   public:

    typedef char_traits<char>		 traits;

    typedef char				char_type;
    typedef typename traits::int_type	int_type;
    typedef typename traits::pos_type	pos_type;
    typedef typename traits::off_type	off_type;

    explicit istrstream(const char *s);
    istrstream(const char *s, streamsize	n);
    explicit istrstream(char *s);
    istrstream(char *s, streamsize n);

    virtual ~istrstream();

    strstreambuf	*rdbuf() const;

    char	*str();

   };

 TYPES

   char_type
      The type char_type	is a synonym of	type char.

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits
      The type traits is	a synonym of type char_traits<char>.

 CONSTRUCTORS

   explicit istrstream(const char* s);
   explicit istrstream(char* s);
      Constructs	an object of class istrstream, initializing the	base
      class basic_istream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized	by calling
      strstreambuf(s,0), where s shall designate the first element of
      an NTBS.

   explicit istrstream(const char* s, streamsize	n);
   explicit istrstream(char* s, streamsize n);
      Constructs	an object of class istrstream, initializing the	base
      class basic_istream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized	by calling
      strstreambuf(s,n), where s shall designate the first element of
      an array whose length	is n elements, and	n shall	be
      greater than	zero.

 DESTRUCTORS

   virtual ~istrstream();
      Destroys an object	of class istrstream.

 MEMBER FUNCTIONS

   char*
   str();
      Returns a pointer to the underlying array object which may
      be null.

   strstreambuf*
   rdbuf() const;
      Returns a pointer to the private strstreambuf object associated
      with the stream.

 EXAMPLES

   //
   // stdlib/examples/manual/istrstream.cpp
   //
   #include<iostream>
   #include<strstream>

   void main ( )
   {
    using namespace std;

    const char* p="C'est	pas l'homme qui	prend la mer, ";
    char* s="c'est la mer qui prend l'homme";

     // create an istrstream object and initialize
     // the underlying strstreambuf with	p
    istrstream in_first(p);

     // create an istrstream object and initialize
     // the underlying strstreambuf with	s
    istrstream in_next(s);

     // create an ostrstream object
    ostrstream out;

     // output the content of in_first and
     // in_next to out
    out << in_first.rdbuf() << in_next.str();

     // output the content of out to stdout
    cout	<< endl	<< out.rdbuf() << endl;

     // output the content of in_first to stdout
    cout	<< endl	<< in_first.str();

     // output the content of in_next to	stdout
    cout	<< endl	<< in_next.rdbuf() << endl;

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   strstreambuf, ostrstream, strstream(3c++)

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Annex D
   Compatibility features Section D.6.2

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  30 - ofstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ofstream,ofstream

   This page describes the -ANSI	basic_ofstream class.  If you would
   like information on the pre-ANSI ofstream class, use the command:

        help cxxl

 SYNOPSIS

   #include <fstream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ofstream
   : public basic_ostream<charT,	traits>

 DESCRIPTION

   The template class basic_ofstream<charT,traits> supports writing
   into	named files	or other devices associated with a file
   descriptor. It uses a basic_filebuf	object to control the
   associated sequences. It inherits	from basic_ostream	and
   can	therefore use all the formatted	and unformatted	output
   functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ofstream
   : public basic_ostream<charT,	traits>	{

   public:

    typedef basic_ios<charT, traits>    ios_type;

    typedef charT		       char_type;
    typedef traits		       traits_type;
    typedef typename traits::int_type   int_type;
    typedef typename traits::pos_type   pos_type;
    typedef typename traits::off_type   off_type;

    basic_ofstream();

    explicit basic_ofstream(const char *s,
 			   ios_base::openmode mode =
 			   ios_base::out,
 			   long	protection = 0666);

    explicit basic_ofstream(int fd);

    basic_ofstream(int fd, char_type* buf, int len);

    virtual ~basic_ofstream();

    basic_filebuf<charT,	traits>	*rdbuf() const;

    bool	is_open();

    void	open(const char	*s, ios_base::openmode mode =
 	     ios_type::out, long protection = 0666);

    void	close();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ofstream
      The type ofstream is an instantiation of  class basic_ofstream on
      type char:

        typedef basic_ofstream<char> ofstream;

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wofstream
      The type wofstream	is an instantiation of class basic_ofstream on
      type wchar_t:

        typedef basic_ofstream<wchar_t> wofstream;

 CONSTRUCTORS

   basic_ofstream();
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class basic_ostream with the associated
      file buffer, which is initialized by calling the	basic_filebuf
      constructor basic_filebuf<charT,traits>(). After construction a
      file can be attached to	the basic_oftream object using the
      open	member function.

   basic_ofstream(const char* s,
 		ios_base::openmode mode= ios_base::in,
 		long protection= 0666);
 	Constructs an object	of class
 	basic_ofstream<charT,traits>,  initializing the base	class
 	basic_ostream with the associated file buffer, which	is
 	initialized by calling the basic_filebuf constructor
 	basic_filebuf<charT,traits>(). The constructor then calls
 	the open function open(s,mode,protection) in	order to
 	attach the file whose name is pointed at by s, to the
 	basic_oftream object. The third argument, protection, is
 	used	as the file permissions. It does not appear in the
 	Standard C++	description and	is provided as an extension.
 	It determines the file read/write/execute permissions
 	under UNIX.	It is more limited under DOS since files are
 	always readable and do not have special execute permis-
 	sion.

   explicit basic_ofstream(int fd);
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class	basic_ostream with the
      associated file buffer, which is	initialized by calling the
      basic_filebuf constructor basic_filebuf<charT,traits>(). The
      constructor then calls the basic_filebuf open	function
      open(fd) in order to attach the file descriptor	fd to the
      basic_oftream	 object. This constructor is not described in
      the C++ standard, and	is provided as an extension in order
      to	manipulate pipes, sockets or other UNIX	devices, that can be
      accessed through file descriptors. If the function fails, it sets
      ios_base::failbit.

   basic_ofstream(int fd, char_type* buf,int len);
      Constructs	an object of class basic_ofstream<charT,traits>,
      initializing the base class	basic_ostream with the
      associated file buffer, which is	initialized by calling the
      basic_filebuf constructor basic_filebuf<charT,traits>(). The
      constructor then calls the basic_filebuf open	function
      open(fd) in order to attach the file descriptor	fd to the
      basic_oftream	 object. The underlying	buffer is then
      replaced by calling the basic_filebuf	member function	setbuf
      with parameters	buf and	len. This constructor is not described
      in the C++ standard, and is provided as an extension in order
      to manipulate pipes, sockets or	other UNIX devices, that can
      be	accessed through file descriptors. It also maintains
      compatibility with the old iostreams library. If the function
      fails, it	sets ios_base::failbit.

 DESTRUCTOR

   virtual ~basic_ofstream();
      Destroys an object	of class basic_ofstream.

 MEMBER FUNCTIONS

   void
   close();
      Calls the associated basic_filebuf	function close() and if	this
      function fails, it calls the basic_ios member function
      setstate(failbit).

   bool
   is_open();
      Calls the associated basic_filebuf	function is_open() and return
      its result.

   void
   open(const char* s,ios_base::openmode	=
 	   ios_base::out, long protection = 0666);
      Calls the	associated basic_filebuf function
      open(s,mode,protection) and, if this function fails opening the
      file, calls the basic_ios	member function	setstate(failbit). The
      third	argument, protection, is used as the file permis-
      sions. It	does not appear	in the Standard	C++ description	and is
      provided as an	extension. It determines the file
      read/write/execute permissions under UNIX, and is	more limited
      under DOS	since files are	always readable	and do not have	spe-
      cial execute permission.

   basic_filebuf<charT,traits>*
   rdbuf() const;
      Returns a pointer to the basic_filebuf associated with the	stream.

 EXAMPLES

   See basic_fstream, basic_ifstream and	basic_filebuf examples.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_filebuf, basic_ifstream, basic_fstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.8.1.8

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  31 - ostream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ostream

 SYNOPSIS

   #include <ostream>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_ostream
   : virtual public basic_ios<charT, traits>

 DESCRIPTION

   The class basic_ostream defines a number of member function
   signatures that assist in formatting and writing output to sequences
   controlled by a stream buffer.

   Two groups of	member function	signatures share common	properties:
   the formatted output	functions (or insertors) and the
   unformatted output functions. Both groups of	functions
   insert characters by calling basic_streambuf member functions. They
   both begin by constructing an object of class basic_ostream::sentry
   and, if this object is	in good	state after construction,
   the function tries to perform the requested output. The	sen-
   try object performs exception-safe initialization, such as
   controlling the status of the	stream or locking it in	multithread
   environment.

   Some formatted output	functions generate the requested output	by
   converting a value from some scalar to text form	and inserting
   the converted text in the output sequence. The conversion behavior
   is locale dependent, and directly depend on the locale	object
   imbued in the stream.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_ostream
   :virtual public basic_ios<charT, traits> {

   public:

    typedef basic_ostream<charT,	traits>	  ostream_type;
    typedef basic_ios<charT, traits>	  ios_type;

    typedef traits			  traits_type;
    typedef charT			  char_type;

    typedef typename traits::int_type	  int_type;
    typedef typename traits::pos_type	  pos_type;
    typedef typename traits::off_type	  off_type;

    explicit basic_ostream(basic_streambuf<charT, traits> *sb);
    virtual ~basic_ostream();

   class	sentry {

    public:

       explicit sentry(basic_ostream<charT,traits>&);
        ~sentry();
       operator bool ();

     };

    ostream_type& operator<<(ostream_type& (*pf)(ostream_type&));
    ostream_type& operator<<(ios_base& (*pf)(ios_base&));
    ostream_type& operator<<(ios_type& (*pf)(ios_type&));

    ostream_type& operator<<(bool n);
    ostream_type& operator<<(short n);
    ostream_type& operator<<(unsigned short n);
    ostream_type& operator<<(int	n);
    ostream_type& operator<<(unsigned int n);
    ostream_type& operator<<(long n);
    ostream_type& operator<<(unsigned long n);
    ostream_type& operator<<(float f);
    ostream_type& operator<<(double f);
    ostream_type& operator<<(long double	f);

    ostream_type& operator<<(void *p);

    ostream_type& operator<<(basic_streambuf<char_type, traits>&	sb);
    ostream_type& operator<<(basic_streambuf<char_type, traits> *sb);

    ostream_type& put(char_type c);

    ostream_type& write(const char_type *s, streamsize n);

    ostream_type& flush();

    ostream_type& seekp(pos_type	);
    ostream_type& seekp(off_type	, ios_base::seekdir );
    pos_type tellp();

   protected:

    basic_ostream();

   };

   //global functions

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, charT);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, char);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, const charT*);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>&, const char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, unsigned char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, signed char);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	unsigned char*);

   template <class traits>
   basic_ostream<char,traits>&
   operator<<(basic_ostream<char,traits>&, const	signed char*);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   endl(basic_ostream<charT, traits>& os);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   ends(basic_ostream<charT, traits>& os);

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   flush(basic_ostream<charT, traits>& os);

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is a synonym for	basic_ios<charT, traits>.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostream
      The type ostream is an instantiation of class basic_ostream on type
      char:

        typedef basic_ostream<char> ostream;

   ostream_type
      The type ostream_type is a	synonym	for basic_ostream<charT, traits>.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wostream
      The type wostream is an instantiation of class basic_ostream on type
      wchar_t:

        typedef basic_ostream<wchar_t> wostream;

 CONSTRUCTOR

   explicit basic_ostream(basic_streambuf<charT,	traits>* sb);
      Constructs	an object of class basic_ostream, assigning initial
      values to the base class by calling
      basic_ios<charT,traits>::init(sb).

 DESTRUCTOR

   virtual ~basic_ostream();
      Destroys an object	of class basic_ostream.

 SENTRY CLASS

   explicit sentry(basic_ostream<charT,traits>&);
      Prepares for formatted or unformatted output. First if the
      basic_ios member function tie() is not a null pointer, the
      function synchronizes the output	sequence with any associated
      stream. If	after any preparation is	completed the
      basic_ios	member function	good() is true,	the sentry conversion
      function operator bool () will return true. Otherwise it will
      return false. In multithread environment the sentry object
      constructor is	responsible for	locking	the stream and the
      stream buffer associated with the stream.

   ~sentry();
      Destroys an object	of class sentry. If the	ios_base member
      function flags() & unitbuf == true,	then flush the buffer.
      In multithread environment the sentry object destructor is
      responsible for unlocking the stream	and the	stream buffer
      associated with the stream.

   operator bool();
      If	after any preparation is completed the ios_base	member
      function good() is true, the sentry	conversion function
      operator bool() will return true else it will return false.

 INSERTORS

   ostream_type&
   operator<<(ostream_type& (*pf) (ostream_type&));
      Calls pf(*this), then return *this. See, for example, the
      function	signature endl(basic_ostream&).

   ostream_type&
   operator<<(ios_type& (*pf) (ios_type&));
      Calls pf(*this), then return *this.

   ostream_type&
   operator<<(ios_base& (*pf) (ios_base&));
      Calls pf(*this), then return *this. See, for example, the
      function	signature dec(ios_base&).

   ostream_type&
   operator<<(bool n);
      Converts the boolean value	n, and outputs it into the
      basic_ostream object's buffer. If the ios_base member function
      flag() & ios_base::boolalpha is false it tries to write an
      integer value, which must be 0 or 1. If	the boolalpha flag is
      true, it writes characters according to the locale function
      numpunct<>::truename() or numpunct<>::falsename().

   ostream_type&
   operator<<(short n);
      Converts the signed short integer n, and output it	into the
      stream buffer, then return *this.

   ostream_type&
   operator<<(unsigned short n);
      Converts the unsigned short integer n, and	output it into the
      stream buffer, then return *this.

   ostream_type&
   operator<<(int n);
      Converts the signed integer n, and	output it into the stream
      buffer, then return *this.

   ostream_type&
   operator<<(unsigned int n);
      Converts the unsigned integer n, and output it into the stream
      buffer, then return *this.

   ostream_type&
   operator<<(long n);
      Converts the signed long integer n, and output it into the	stream
      buffer, then return *this.

   ostream_type&
   operator<<(unsigned long n);
      Converts the unsigned long	integer	n, and output it into the
      stream buffer, then return *this.

   ostream_type&
   operator<<(float f);
      Converts the float	f and output it	into the stream	buffer,	then
      return *this.

   ostream_type&
   operator<<(double f);
      Converts the double f and output it into the stream buffer, then
      return *this.

   ostream_type&
   operator<<(long double f);
      Converts the long double f	and output it into the stream buffer,
      then return *this.

   ostream_type&
   operator<<(void *p);
      Converts the pointer p, and output	it into	the stream buffer,
      then return *this.

   ostream_type&
   operator<<(basic_streambuf<charT,traits> *sb);
      If	sb is null calls the basic_ios member function
      setstate(badbit). Otherwise gets characters from sb and
      inserts	them into the stream buffer until any of the
      following occurs:

      +	     end-of-file occurs	on the input sequence.

      +	     inserting in the output sequence fails

      +	     an	exception occurs while getting a character from	sb

      If	the function inserts no	characters or if it stopped because an
      exception was thrown while extracting a	character, it calls
      the	basic_ios member function setstate(failbit).	If an
      exception	was thrown while extracting	a character it is
      rethrown.

   ostream_type&
   operator<<(basic_streambuf<charT,traits>& sb);
      Gets characters from sb and inserts them into the stream buffer
      until any of the	following occurs:

      +	     end-of-file occurs	on the input sequence.

      +	     inserting in the output sequence fails

      +	     an	exception occurs while getting a character from	sb

      If	the function inserts no	characters or if it stopped because an
      exception was thrown while extracting a	character, it calls
      the	basic_ios member function setstate(failbit).	If an
      exception was thrown while extracting	a character it is
      rethrown.

 UNFORMATTED FUNCTIONS

   ostream_type&
   flush();
      If	rdbuf()	is not a null pointer, calls rdbuf()->pubsync()	and
      returns *this. If that function returns -1	calls
      setstate(badbit).

   ostream_type&
   put(char_type	c);
      Inserts the character c. If the operation fails, calls the
      basic_ios member function setstate(badbit).

   ostream_type&
   seekp(pos_type pos);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(pos), which will position the current pointer
      of the output sequence at	the position designated	by pos.

   ostream_type&
   seekp(off_type off, ios_base::seekdir	dir);
      If	the basic_ios member function fail() returns false, executes
      rdbuf()->pubseekpos(off,dir), which will position the current
      pointer of the output	sequence at the	position designated by
      off and dir.

   pos_type
   tellp();
      If	the basic_ios member function fail() returns true, tellp()
      returns pos_type(off_type(-1)) to indicate	failure. Otherwise it
      returns the current position of the output sequence by
      calling	rdbuf()-> pubseekoff(0,cur, out).

   ostream_type&
   write(const char_type* s, streamsize n);
      Obtains characters	to insert from successive locations of an
      array	whose first element is designated by s. Characters are
      inserted until either of	the following occurs:

      +	     n characters are inserted

      +	     inserting in the output sequence fails

      In	the second case	the function calls the basic_ios member
      function setstate(badbit). The function returns *this.

 NON MEMBER FUNCTIONS

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   endl(basic_ostream<charT, traits>& os);
      Outputs a newline character and flush the buffer, then returns
      os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   ends(basic_ostream<charT, traits>& os);
      Inserts a null character into the output sequence,	then returns os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   flush(basic_ostream<charT, traits>& os);
      Flushes the buffer, then returns os.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, charT c);
      Outputs the character c of	type charT into	the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type charT. Padding is not ignored.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, char c);
      Outputs the character c of	type char into the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type charT. Conversion from characters of type
      char to characters of type charT is performed	by the
      basic_ios member	function widen.	padding	is not ignored.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, char c);
      Outputs the character c of	type char into the basic_ostream
      object's buffer. Both the stream and the stream buffer are
      instantiated on type char. Padding is not ignored.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, const charT* s);
      Outputs the null-terminated-byte-string s of type charT* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type charT.

   template<class charT,	class traits>
   basic_ostream<charT, traits>&
   operator<<(basic_ostream<charT, traits>& os, const char* s);
      Outputs the null-terminated-byte-string s of type char* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type charT. Conversion from characters
      of type char to characters	of type	charT is performed by the
      basic_ios member function widen.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, const char* s);
      Outputs the null-terminated-byte-string s of type char* into the
      basic_ostream object's buffer. Both the stream and	the stream
      buffer are instantiated on type char.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, unsigned char c);
      Returns os	<< (char)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, signed char c);
      Returns os	<< (char)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, unsigned char* c);
      Returns os	<< (char*)c.

   template<class traits>
   basic_ostream<char, traits>&
   operator<<(basic_ostream<char, traits>& os, signed char* c);
      Returns os	<< (char*)c.

 FORMATTING

   The formatting is done through member	functions or manipulators.

   Manipulators		      Member Functions

   showpos		      setf(ios_base::showpos)
   noshowpos		      unsetf(ios_base::showpos)
   showbase		      setf(ios_base::showbase)
   noshowbase		      unsetf(ios_base::showbase)
   uppercase		      setf(ios_base::uppercase)
   nouppercase		      unsetf(ios_base::uppercase)
   showpoint		      setf(ios_base::showpoint)
   noshowpoint		      unsetf(ios_base::showpoint)
   boolalpha		      setf(ios_base::boolalpha)
   noboolalpha		      unsetf(ios_base::boolalpha)
   unitbuf		      setf(ios_base::unitbuf)
   nounitbuf		      unsetf(ios_base::unitbuf)
   internal		      setf(ios_base::internal,
 				 ios_base::adjustfield)
   left			      setf(ios_base::left,
 				 ios_base::adjustfield)
   right			      setf(ios_base::right,
 				 ios_base::adjustfield)
   dec			      setf(ios_base::dec,
 				 ios_base::basefield)
   hex			      setf(ios_base::hex,
 				 ios_base::basefield)
   oct			      setf(ios_base::oct,
 				 ios_base::basefield)
   fixed			      setf(ios_base::fixed,
 				 ios_base::floatfield)
   scientific		      setf(ios_base::scientific,
 				 ios_base::floatfield)
   resetiosflags
    (ios_base::fmtflags flag)  setf(0,flag)
   setiosflags
    (ios_base::fmtflags flag)  setf(flag)
   setbase(int base)	      See above
   setfill(char_type c)	      fill(c)
   setprecision(int n)	      precision(n)
   setw(int n)		      width(n)

 DESCRIPTION

   showpos   Generates a	+ sign in non-negative generated numeric output

   showbase   Generates a prefix	indicating the numeric base of generated
 	     integer output

   uppercase   Replaces certain lowercase letters with their uppercase
 	      equivalents in generated output

   showpoint   Generates	a decimal-point	character unconditionally in
               generated floating-point output

   boolalpha   Insert and extract bool type in alphabetic format

   unitbuf   Flushes output after each output operation

   internal   Adds fill characters at a designated internal point in
              certain generated output, or identical to right if	no such
              point is designated

   left	 Adds fill characters on the right (final positions) of	certain
          generated	output

   right	  Adds fill characters on the left (initial positions) of certain
 	  generated output

   dec	Converts integer input or generates integer output in decimal
         base

   hex	Converts integer input or generates integer output in hexadecimal
 	base

   oct	Converts integer input or generates integer output in octal base

   fixed	  Generates floating-point output in fixed-point notation

   scientific   Generates floating-point	output in scientific notation

   resetiosflagss

   (ios_base::fmtflags flag)   Resets the fmtflags field	flag

   setiosflags

   (ios_base::fmtflags flag)   Set up the flag flag

   setbase(int base)   Converts integer input or	generates integer output
                       in base base. The parameter base can	be 8, 10
                       or 16.

   setfill(char_type c)	 Set the character used	to pad (fill) an output
 			 conversion to the specified field width

   setprecision(int n)	Set the	precision (number of digits after the
                         decimal point) to generate on certain output
                         conversions

   setw(int n)	Set the	field with (number of characters) to generate on
                 certain output conversions

 EXAMPLES

   //
   // stdlib/examples/manual/ostream1.cpp
   //
   #include<iostream>
   #include<ostream>
   #include<sstream>
   #include<iomanip>

   void main ( )
   {
     using namespace std;

     float f= 3.14159;
     int	  i= 22;
     char* s= "Randy is the king	of stdlib";

      //	create a read/write stringbuf object on	tiny char
      //	and attach it to an istringstream object
     istringstream in( ios_base::in | ios_base::out );

      //	tie the	ostream	object to the istringstream object
     ostream out(in.rdbuf());

     out	<< "test beginning !" << endl;

      //	output i in hexadecimal
     out	<< hex << i <<endl;

      //	set the	field width to 10
      //	set the	padding	character to '@'
      //	and output i in	octal
     out	<< setw(10) << oct << setfill('@') << i	<< endl;

      //	set the	precision to 2 digits after the	separator
      //	output f
     out	<< setprecision(3) << f	<< endl;

      //	output the 17 first characters of s
     out.write(s,17);

      //	output a newline character
     out.put('0);

      //	output s
     out	<< s <<	endl;

      //	output the all buffer to standard output
     cout << in.rdbuf();
   }

   //
   // stdlib/examples/manual/ostream2.cpp
   //
   #include<iostream>
   #include<ostream>
   #include<sstream>

   void main ( )
   {
     using namespace std;

     float f= 3.14159;
     wchar_t* s=	L"Kenavo !";

      //	create a read/write stringbuf object on	wide char
      //	and attach it to an wistringstream object
     wistringstream in( ios_base::in | ios_base::out );

      //	tie the	wostream object	to the wistringstream object
     wostream out(in.rdbuf());

     out	<< L"test beginning !" << endl;

      //	output f in scientific format
     out	<< scientific << f <<endl;

      //	store the current put-pointer position
     wostream::pos_type pos = out.tellp();

      //	output s
     out	<< s <<	endl;

      //	output the all buffer to standard output
     wcout << in.rdbuf()	<< endl;

      //	position the get-pointer
     in.seekg(pos);

      //	output s
     wcout << in.rdbuf()	<< endl;
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_iostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.2.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  32 - ostringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_ostringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_ostringstream
   : public basic_ostream<charT,	traits>

 DESCRIPTION

   The template class basic_ostringstream<charT,traits,Allocator>
   provides functionality	to write to an array in	memory.	It
   supports writing objects of class
   basic_string<charT,traits,Allocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_ostream and therefore	can use	all the	formatted and
   unformatted output functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_ostringstream
   : public basic_ostream<charT,	traits>	{

   public:

    typedef basic_stringbuf<charT, traits, Allocator> sb_type;
    typedef basic_ios<charT, traits>		     ios_type;

    typedef basic_string<charT, traits, Allocator>    string_type;

    typedef traits			    traits_type;
    typedef charT			    char_type;
    typedef typename traits::int_type	    int_type;
    typedef typename traits::pos_type	    pos_type;
    typedef typename traits::off_type	    off_type;

    explicit basic_ostringstream(ios_base::openmode which =
 				ios_base::out);

    explicit basic_ostringstream(const string_type& str,
 				ios_base::openmode which =
 				ios_base::out);

    virtual ~basic_ostringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   ostringstream
      The type ostringstream is an instantiation	of class
      basic_ostringstream on	type char:

        typedef basic_ostringstream<char> ostringstream;

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf
      on type charT.

   string_type
      The type string_type is an	instantiation of class basic_string
      on type charT.

   traits_type
      The type traits_type is a synonym for the template	parameter
      traits.

   wostringstream
      The type wostringstream is	an instantiation of class
      basic_ostringstream on	type wchar_t:

        typedef basic_ostringstream<wchar_t> wostringstream;

 CONSTRUCTORS

   explicit basic_ostringstream(ios_base::openmode which	=
 			      ios_base::out);
 	Constructs an object of class
 	basic_ostringstream, initializing the base
 	class basic_ostream with the associated
 	string	buffer.	The string buffer is initial-
 	ized by calling the basic_stringbuf con-
 	structor
 	basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_ostringstream(const string_type& str,
 			      ios_base::openmode which =
 			      ios_base::out);
 	Constructs an object of class
 	basic_ostringstream, initializing the base
 	class basic_ostream with the associated
 	string	buffer.	The string buffer is initial-
 	ized by calling the basic_stringbuf con-
 	structor
 	basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_ostringstream();
      Destroys an object	of class basic_ostringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the
      stream.

   string_type
   str()	const;
      Returns a string object of	type string_type whose contents	is a
      copy of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	underlying string buffer and copies the	string object
      str into it. If the opening mode is in, initialize the	input
      sequence to point at the first	character of the buffer. If
      the	opening	mode is	out, initialize	the output sequence to
      point at	the first character of the buffer. If	the opening
      mode is out	| app, initialize the output sequence to
      point at the last character of the buffer.

 EXAMPLES

   See basic_stringstream, basic_istringstream and basic_stringbuf
   examples.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_istringstream,	basic_stringstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.2.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  33 - ostrstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   ostrstream

 SYNOPSIS

   #include <strstream>
   class	ostrstream
   : public basic_ostream<char>

 DESCRIPTION

   The class ostrstream provides	functionality to write to an array in
   memory. It uses a private strstreambuf object	to control the
   associated array object. It inherits from basic_ostream<char> and
   therefore can use all the formatted and	unformatted output
   functions.

 INTERFACE

   class	ostrstream
   : public basic_ostream<char> {

   public:

    typedef char_traits<char>		 traits;

    typedef char				char_type;
    typedef typename traits::int_type	int_type;
    typedef typename traits::pos_type	pos_type;
    typedef typename traits::off_type	off_type;

    ostrstream();
    ostrstream(char *s, int n,
 	      ios_base::openmode = ios_base::out);

    virtual ~ostrstream();

    strstreambuf	*rdbuf() const;

    void	freeze(int freezefl = 1);

    char	*str();

    int pcount()	const;

   };

 TYPES

   char_type
      The type char_type	is a synonym of	type char.

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits
      The type traits is	a synonym of type char_traits<char>.

 CONSTRUCTORS

   ostrstream();

      Constructs	an object of class ostrstream, initializing the	base
      class basic_ostream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized	by calling its
      default constructor strstreambuf().

   ostrstream(char* s,int n, ios_base::openmode
 	    mode = ios_base::out);
      Constructs an object of class ostrstream, initializing the base
      class basic_ostream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized by calling one of
      two constructors:

 	       +       if mode & app ==	0 calls	strstreambuf(s,n,s)

 	       +       Otherwise calls strstreambuf(s,n,s + ::strlen(s))

 DESTRUCTOR

   virtual ~ostrstream();
      Destroys an object	of class ostrstream.

 MEMBER FUNCTIONS

   void
   freeze(bool freezefl = 1);
      If	the mode is dynamic, alters the	freeze status of the dynamic
      array object as follows:

      +	     If	freezefl is false, the function	sets the freeze	status
           to frozen.

      +	     Otherwise,	it clears the freeze status.

   int
   pcount() const;
      Returns the size of the output sequence.

   strstreambuf*
   rdbuf() const;
      Returns a pointer to the private strstreambuf object associated
      with the stream.

   char*
   str();
      Returns a pointer to the underlying array object which may	be null.

 EXAMPLES

   See strstream, istrstream and	strstreambuf examples.

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   strstreambuf, istrstream, strstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Annex D
   Compatibility features Section D.6.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  34 - smanip

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   smanip, smanip_fill

 SYNOPSIS

   #include <iomanip>
   template<class T> class smanip;
   template<class T, class traits> class	smanip_fill;

 DESCRIPTION

   The template classes smanip and smanip_fill are helper classes used
   to implement parameterized manipulators.	The class smanip is
   used as the return type for manipulators that do not need	to
   carry information about the character	type of	the stream they	are
   applied to.	This is	the case for resetiosflags, setiosflags,
   setbase, setprecision and	setw. The class smanip_fill is used as
   the return type for manipulators that do need to carry
   information about the character	type of	the stream they	are
   applied to. This is the case for setfill.

 INTERFACE

   template<class T>
   class	smanip {

   public:

    smanip(ios_base& (*pf) (ios_base&, T), T manarg);

   };

   template<class T, class traits>
   class	smanip_fill {

   public:

    smanip_fill(basic_ios<T, traits>& (*pf) (basic_ios<T, traits>&,
 	       T), T manarg);

   };

   // parameterized manipulators

   smanip<ios_base::fmtflags> resetiosflag(ios_base::fmtflags mask);
   smanip<ios_base::fmtflags> setiosflag(ios_base::fmtflags mask);
   smanip<int>		     setbase(int base);
   smanip<int>		     setprecision(int n);
   smanip<int>		     setw(int n);

   template <class charT>
   smanip_fill<charT, char_traits<charT>	> setfill(charT	c);

   // overloaded	extractors

   template <class charT, class traits, class T>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is, const smanip<T>& a);

   template <class charT, class traits>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is,
   const	smanip_fill<charT,char_traits<charT> >&	a);

   // overloaded	insertors

   template <class charT, class traits, class T>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& is, const smanip<T>& a);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator>>(basic_ostream<charT,traits>& is,
   const	smanip_fill<charT,char_traits<charT> >&	a);

 CLASS SMANIP CONSTRUCTOR

   smanip(ios_base& (*pf) (ios_base&, T), T manarg);
      Constructs	an object of class smanip that stores a	function
      pointer pf, that will be called with argument manarg, in order
      to perform the manipulator task. The call to pf is performed in
      the insertor or extractor overloaded	on type	smanip.

 CLASS SMANIP_FILL CONSTRUCTOR

   smanip_fill(basic_ios<T, traits>& (*pf) (basic_ios<T,	traits>&,T), T
   manarg);
      Constructs	an object of class smanip_fill that stores a function
      pointer pf, that will be called with argument manarg, in order to
      perform the manipulator task. The call	to pf is performed in
      the insertor or extractor overloaded on type smanip_fill.

 MANIPULATORS

   smanip<ios_base::fmtflags>
   resetiosflag(ios_base::fmtflags mask);
      Resets the	ios_base::fmtflags designated by mask in the stream to
      which it	is applied.

   smanip<int>
   setbase(int base);
      Sets the base for the output or input of integer values in	the
      stream to which it is applied. The valid values for mask are
      8, 10, 16.

   template <class charT>
   smanip_fill<charT, char_traits<charT>	>
   setfill(charT	c);
      Sets the fill character in	the stream it is applied to.

   smanip<ios_base::fmtflags>
   setiosflag(ios_base::fmtflags	mask);
      Sets the ios_base::fmtflags designated by mask in the stream it
      is applied to.

   smanip<int>
   setprecision(int n);
      Sets the precision	for the	output of floating point values	in the
      stream to	which it is applied.

   smanip<int>
   setw(int n);
      Set the field width in the	stream to which	it is applied.

 EXTRACTORS

   template <class charT, class traits, class T>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is, const smanip<T>& a);
      Applies the function stored in the	parameter of type smanip<T>,
      on	the stream is.

   template <class charT, class traits>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is,
 	    const smanip_fill<charT,char_traits<charT> >& a);
      Applies the function stored in the parameter of type
      smanip_fill<charT, char_traits<charT> >,	on the stream is.

 INSERTORS

   template <class charT, class traits, class T>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& os, const smanip<T>& a);
      Applies the function stored in the	parameter of type smanip<T>,
      on	the stream os.

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& os,
 	    const smanip_fill<charT,char_traits<charT> >& a);
      Applies the function stored in the parameter of type
      smanip_fill<charT, char_traits<charT> >,	on the stream os.

 SEE ALSO

   ios_base, basic_ios, basic_istream,
   basic_ostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  35 - smanip_fill

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   smanip, smanip_fill

 SYNOPSIS

   #include <iomanip>
   template<class T> class smanip;
   template<class T, class traits> class	smanip_fill;

 DESCRIPTION

   The template classes smanip and smanip_fill are helper classes used
   to implement parameterized manipulators.	The class smanip is
   used as the return type for manipulators that do not need	to
   carry information about the character	type of	the stream they	are
   applied to.	This is	the case for resetiosflags, setiosflags,
   setbase, setprecision and	setw. The class smanip_fill is used as
   the return type for manipulators that do need to carry
   information about the character	type of	the stream they	are
   applied to. This is the case for setfill.

 INTERFACE

   template<class T>
   class	smanip {

   public:

    smanip(ios_base& (*pf) (ios_base&, T), T manarg);

   };

   template<class T, class traits>
   class	smanip_fill {

   public:

    smanip_fill(basic_ios<T, traits>& (*pf) (basic_ios<T, traits>&,
 	       T), T manarg);

   };

   // parameterized manipulators

   smanip<ios_base::fmtflags> resetiosflag(ios_base::fmtflags mask);
   smanip<ios_base::fmtflags> setiosflag(ios_base::fmtflags mask);
   smanip<int>		     setbase(int base);
   smanip<int>		     setprecision(int n);
   smanip<int>		     setw(int n);

   template <class charT>
   smanip_fill<charT, char_traits<charT>	> setfill(charT	c);

   // overloaded	extractors

   template <class charT, class traits, class T>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is, const smanip<T>& a);

   template <class charT, class traits>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is,
   const	smanip_fill<charT,char_traits<charT> >&	a);

   // overloaded	insertors

   template <class charT, class traits, class T>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& is, const smanip<T>& a);

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator>>(basic_ostream<charT,traits>& is,
   const	smanip_fill<charT,char_traits<charT> >&	a);

 CLASS SMANIP CONSTRUCTOR

   smanip(ios_base& (*pf) (ios_base&, T), T manarg);
      Constructs	an object of class smanip that stores a	function
      pointer pf, that will be called with argument manarg, in order
      to perform the manipulator task. The call to pf is performed in
      the insertor or extractor overloaded	on type	smanip.

 CLASS SMANIP_FILL CONSTRUCTOR

   smanip_fill(basic_ios<T, traits>& (*pf) (basic_ios<T,	traits>&,T), T
   manarg);
      Constructs	an object of class smanip_fill that stores a function
      pointer pf, that will be called with argument manarg, in order to
      perform the manipulator task. The call	to pf is performed in
      the insertor or extractor overloaded on type smanip_fill.

 MANIPULATORS

   smanip<ios_base::fmtflags>
   resetiosflag(ios_base::fmtflags mask);
      Resets the	ios_base::fmtflags designated by mask in the stream to
      which it	is applied.

   smanip<int>
   setbase(int base);
      Sets the base for the output or input of integer values in	the
      stream to which it is applied. The valid values for mask are
      8, 10, 16.

   template <class charT>
   smanip_fill<charT, char_traits<charT>	>
   setfill(charT	c);
      Sets the fill character in	the stream it is applied to.

   smanip<ios_base::fmtflags>
   setiosflag(ios_base::fmtflags	mask);
      Sets the ios_base::fmtflags designated by mask in the stream it
      is applied to.

   smanip<int>
   setprecision(int n);
      Sets the precision	for the	output of floating point values	in the
      stream to	which it is applied.

   smanip<int>
   setw(int n);
      Set the field width in the	stream to which	it is applied.

 EXTRACTORS

   template <class charT, class traits, class T>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is, const smanip<T>& a);
      Applies the function stored in the	parameter of type smanip<T>,
      on	the stream is.

   template <class charT, class traits>
   basic_istream<charT,traits>&
   operator>>(basic_istream<charT,traits>& is,
 	    const smanip_fill<charT,char_traits<charT> >& a);
      Applies the function stored in the parameter of type
      smanip_fill<charT, char_traits<charT> >,	on the stream is.

 INSERTORS

   template <class charT, class traits, class T>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& os, const smanip<T>& a);
      Applies the function stored in the	parameter of type smanip<T>,
      on	the stream os.

   template <class charT, class traits>
   basic_ostream<charT,traits>&
   operator<<(basic_ostream<charT,traits>& os,
 	    const smanip_fill<charT,char_traits<charT> >& a);
      Applies the function stored in the parameter of type
      smanip_fill<charT, char_traits<charT> >,	on the stream os.

 SEE ALSO

   ios_base, basic_ios, basic_istream,
   basic_ostream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.6.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  36 - streambuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_streambuf,streambuf

   This page describes the ANSI streambuf class.	 If you	would like
   information on the pre-ANSI streambuf class,	use the
   command:

        help cxxl

 SYNOPSIS

   #include <streambuf>
   template<class charT,	class traits = char_traits<charT> >
   class	basic_streambuf;

 DESCRIPTION

   The class template basic_streambuf<charT,traits> serves as an
   abstract base class	for deriving various stream buffers whose
   objects each control two character sequences:

   +	  A character input sequence;

   +	  A character output sequence.

   Each sequence	is characterized by three pointers which, if non-null,
   all point	into the same charT array object. The array object
   represents, at any moment, a subsequence	of characters from the
   sequence. Operations performed on a sequence	alter the values
   stored	in these pointers, perform reads and writes directly
   to or	from associated	sequences, and alter "the stream position" and
   conversion state as needed to maintain this subsequence	rela-
   tionship. The	three pointers are:

   +	  The beginning	pointer, or lowest element address in the array;

   +	  The next pointer, or next element address that is a current
        candidate for	reading	or writing;

   +	  The end pointer, or first element address beyond the end of the
        array.

   Stream buffers can impose various constraints	on the sequences they
   control,	including:

   +	  The controlled input sequence	may be unreadable;

   +	  The controlled output	sequence may be	unwritable;

   +	  The controlled sequences can be associated with the contents of
        other representations for character sequences, such as external
        files;

   +	  The controlled sequences can impose limitations on how the
        program can read	characters from	a sequence, write characters to
        a sequence, put characters back into	an input sequence, or alter
        the	stream position.

 INTERFACE

   template<class charT,	class traits = char_traits<charT> >
   class	basic_streambuf	{

   public:

   typedef charT			      char_type;
   typedef traits		      traits_type;

   typedef typename traits::int_type    int_type;
   typedef typename traits::pos_type    pos_type;
   typedef typename traits::off_type    off_type;

   virtual ~basic_streambuf();

   locale pubimbue( const locale& loc);
   locale getloc() const;

   basic_streambuf<char_type, traits> *
     pubsetbuf(char_type	*s, streamsize n);

   pos_type pubseekoff(off_type off, ios_base::seekdir way,
 		      ios_base::openmode which =
 		      ios_base::in | ios_base::out);

   pos_type pubseekpos(pos_type sp, ios_base::openmode which =
 		      ios_base::in | ios_base::out);

   int pubsync();

   ios_base::openmode which_open_mode();

   streamsize   in_avail();

   int_type snextc();

   int_type sbumpc();

   int_type sgetc();

   streamsize sgetn(char_type *s, streamsize n);

   int_type sputbackc(char_type c);

   int sungetc();

   int_type sputc(char_type c);

   streamsize sputn(const char_type *s, streamsize n);

   protected:

   basic_streambuf();

   char_type *eback() const;
   char_type *gptr() const;
   char_type *egptr() const;

   void gbump(int n);

   void setg(char_type *gbeg_arg,char_type *gnext_arg,
 	    char_type *gend_arg);

   char_type *pbase() const;
   char_type *pptr() const;
   char_type *epptr() const;

   void pbump(int n);

   void setp(char_type *pbeg_arg,char_type *pend_arg);

   virtual void imbue( const locale& loc);

   virtual int_type overflow(int_type c = traits::eof());

   virtual int_type pbackfail(int_type c	= traits::eof());

   virtual int showmanyc();

   virtual int_type underflow();

   virtual int_type uflow();

   virtual streamsize xsgetn(char_type *s, streamsize n);

   virtual streamsize xsputn(const char_type *s,	streamsize n);

   virtual pos_type seekoff(off_type off,ios_base::seekdir way,
 			   ios_base::openmode which =
 			   ios_base::in	| ios_base::out);

   virtual pos_type seekpos(pos_type sp,ios_base::openmode which	=
 			   ios_base::in	| ios_base::out);

   virtual basic_streambuf<charT, traits>*
     setbuf(char_type *s, streamsize n);

   virtual int sync();

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   streambuf
      The type streambuf	is an instantiation of class basic_streambuf
      on	type char:

        typedef basic_streambuf<char> streambuf;

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wstreambuf
      The type wstreambuf is an instantiation of	 class basic_streambuf on
      type wchar_t:

        typedef basic_streambuf<wchar_t>	wstreambuf;

 PUBLIC CONSTRUCTOR

   basic_streambuf();
      Constructs	an object of class basic_streambuf and initializes all
      its pointer member objects to null pointers and the getloc()
      member function to	return the value of locale::locale().

 PUBLIC DESTRUCTOR

   virtual ~basic_streambuf();
      Destroys an object	of class basic_streambuf.

 PUBLIC MEMBER FUNCTIONS

   locale
   getloc() const;
      If	pubimbue() has ever been called, returns the last value	of loc
      supplied, otherwise, the default locale locale::locale() in
      effect at	the time of construction.

   streamsize
   in_avail();
      If	a read position	is available, returns the number of available
      character in the	input sequence.	Otherwise calls	the protected
      function showmanyc().

   locale
   pubimbue(const locale& loc);
      Calls the protected function imbue(loc).

   pos_type
   pubseekoff(off_type off, ios_base::seekdir way,
 	    ios_base::openmode which =
 	    ios_base::in | ios_base::out );
 	       Calls the protected function seekoff(off,way,which).

   pos_type
   pubseekpos(pos_type sp, ios_base::openmode which=
 	    ios_base::in | ios_base::out );
 	       Calls the protected function seekpos(sp,which).

   basic_streambuf<char_type,traits>*
   pubsetbuf(char_type* s,streamsize n);
      Calls the protected function setbuf(s,n) .

   int
   pubsync();
      Calls the protected function sync().

   int_type
   sbumpc();
      If	the input sequence read	position is not	available, calls the
      function uflow(), otherwise	returns	*gptr()	and increments
      the next	pointer	for the input sequence.

   int_type
   sgetc();
      If	the input sequence read	position is not	available, calls the
      protected function underflow(), otherwise returns *gptr() .

   streamsize
   sgetn(char_type* s, streamsize n);
      Calls the protected function xsgetn(s,n).

   int_type
   snextc();
      Calls the function	sbumpc() and if	it returns traits::eof(),
      returns traits::eof(); otherwise calls the	function sgetc() .

   int_type
   sputbackc(char_type c);
      If	the input sequence putback position is not available, or if
      traits::eq(c,gptr() [-1]) returns false, calls the	protected
      function pbackfail(c), otherwise decrements	the next
      pointer for the input sequence and returns *gptr().

   int_type
   sputc(char_type c);
      If	the output sequence write position is not available, calls the
      protected function overflow(traits::to_int_type( c )).
      Otherwise, stores c at	the next pointer for the output
      sequence, increments the pointer, and returns *pptr() .

   streamsize
   sputn(const char_type* s, streamsize n);
      Calls the protected function xsputn(s,n).

   int_type
   sungetc();
      If	the input sequence putback position is not available, calls
      the	protected function pbackfail(). Otherwise decrements
      the next	pointer	for the input sequence	and returns *gptr().

   ios_base::openmode
   which_open_mode();
      Returns the mode in which the stream buffer is opened. This
      function is not described in the C++ standard.

 PROTECTED MEMBER FUNCTIONS

   char_type*
   eback() const;
      Returns the beginning pointer for the input sequence.

   char_type*
   egptr() const;
      Returns the end pointer for the input sequence.

   char_type*
   epptr() const;
      Returns the end pointer for the output sequence.

   void
   gbump(int n);
      Advances the next pointer for the input sequence by n.

   char_type*
   gptr() const;
      Returns the next pointer for the input sequence.

   void
   imbue(const locale&);
      Changes any translations based on locale. The default behavior is
      to do nothing, this function has	to be overloaded in the
      classes	derived	from basic_streambuf. The purpose of this
      function is to allow the derived class to be informed of changes
      in	locale at the time they	occur. The new imbued	locale object
      is only used by the stream buffer, it does not affect the	stream
      itself.

   int_type
   overflow(int_type c =	traits::eof() );
      The member	functions sputc() and sputn() call this	function in
      case that not enough	room can be found in the put buffer to
      accommodate the argument character sequence. The function
      returns traits::eof() if it fails to	make more room
      available, or to	empty the buffer by writing the characters
      to their output	device.

   int_type
   pbackfail(int_type c = traits::eof() );
      If	c is equal to traits::eof(), gptr() is moved back one position
      otherwise c is prepended. The function returns traits::eof() to
      indicate failure.

   char_type*
   pbase() const;
      Returns the beginning pointer for the output sequence.

   void
   pbump(int n);
      Advances the next pointer for the output sequence by n.

   char_type*
   pptr() const;
      Returns the next pointer for the output sequence.

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,
 	 ios_base::openmode which =
 	 ios_base::in |	ios_base::out );
      Alters the stream positions within one or more of the
      controlled sequences in a way that is defined separately for each
      class derived from basic_streambuf. The default behavior is to
      return an object of type pos_type that stores an invalid stream
      position.

   pos_type
   seekpos(pos_type sp, ios_base::openmode which=
 	 ios_base::in |	ios_base::out );
      Alters the stream positions within one or more of the
      controlled sequences in a way that is defined separately for each
      class derived from basic_streambuf. The default behavior is to
      return an object of class pos_type	that stores an invalid stream
      position.

   basic_streambuf*
   setbuf(char_type* s, streamsize n);
      Performs an operation that	is defined separately for each class
      derived from basic_streambuf. The purpose of this function	is to
      allow the	user to	provide	his own	buffer,	or to resize the
      current buffer.

   void
   setg(char_type* gbeg,	char_type* gnext, char_type* gend);
      Sets up private member for	the following to be true:

      eback() ==	gbeg, gptr() ==	gnext and egptr() == gend

   void
   setp(char_type* pbeg,	char_type* pend);
      Sets up private member for	the following to be true:

      pbase() ==	pbeg, pptr() ==	pbeg and epptr() == pend

   int
   showmanyc();
      Returns the number	of characters available	in the internal
      buffer,	or -1.

   int
   sync();
      Synchronizes the controlled sequences with	the internal buffer,
      in	a way that is defined separately	for each class derived
      from basic_streambuf. The default behavior is to	do nothing. On
      failure the return value	is -1.

   int_type
   underflow();
      The public	members	of basic_streambuf call	this function only if
      gptr() is	null or	gptr() >= egptr(). This	function returns the
      character pointed at	by gptr() if gptr() is not null	and if
      gptr() <	egptr(). Otherwise the	function try to	read
      character into the	buffer,	and if it fails return traits::eof().

   int_type
   uflow();
      Calls underflow() and if underflow() returns traits::eof(),
      returns traits::eof(). Otherwise, does gbump(1) and returns the
      value of *gptr().

   streamsize
   xsgetn(char_type* s, streamsize n);
      Assigns up	to n characters	to successive elements of the array
      whose first element is designated by s. The characters are read
      from the	input sequence. Assigning stops when either n
      characters	have been assigned or a call to sbumpc()	would
      return traits::eof(). The	function returns the number of
      characters read.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. Writing stops when either n
      characters	have been written or	a call to sputc() would	return
      traits::eof(). The function returns the number	of characters
      written.

 SEE ALSO

   char_traits,	basic_filebuf,	basic_stringbuf,
   strstreambuf

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.5

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  37 - stringbuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_stringbuf

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_stringbuf
   : public basic_streambuf<charT, traits>

 DESCRIPTION

   The class basic_stringbuf is derived from basic_streambuf.  Its
   purpose is to associate the input or output sequence with a sequence
   of arbitrary characters.  The sequence can	be initialized from,
   or	made available as, an object of class basic_string.	Each
   object of type basic_stringbuf<charT, traits,Allocator> controls two
   character sequences:

   +	  A character input sequence;

   +	  A character output sequence.

   Note:	see basic_streambuf.

   The two sequences are	related	to each	other, but are manipulated
   separately. This allows you to read and write	characters at
   different	positions	in objects of type basic_stringbuf
   without any conflict	(as opposed to the basic_filebuf objects,
   in which a joint file position is maintained).

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	allocator<void>	>
   class	basic_stringbuf
   : public basic_streambuf<charT, traits> {

    public:

     typedef basic_ios<charT, traits>	 ios_type;

     typedef basic_string<charT,	traits,
 			 Allocator>	 string_type;

     typedef charT			 char_type;
     typedef typename traits::int_type	 int_type;
     typedef typename traits::pos_type	 pos_type;
     typedef typename traits::off_type	 off_type;

     explicit basic_stringbuf(ios_base::openmode	which =
 			      (ios_base::in | ios_base::out));

     explicit basic_stringbuf(const string_type&	str,
 			     ios_base::openmode	which =
 			      (ios_base::in | ios_base::out));

     virtual ~basic_stringbuf();

     string_type	str() const;
     void str(const string_type&	str_arg);

   protected:

     virtual int_type overflow(int_type c = traits::eof());

     virtual int_type pbackfail(int_type	c = traits::eof());

     virtual int_type underflow();

     virtual basic_streambuf<charT,traits>*
      setbuf(char_type *s,streamsize n);

     virtual pos_type seekoff(off_type off, ios_base::seekdir way,
 			     ios_base::openmode	which =
 			     ios_base::in | ios_base::out);

     virtual pos_type seekpos(pos_type sp,
 			     ios_base::openmode	which =
 			     ios_base::in | ios_base::out);

     virtual streamsize xsputn(const char_type* s, streamsize n);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   string_type
      The type string_type is an	instantiation of class basic_string on
      type charT.

   stringbuf
      The type stringbuf	is an instantiation of class basic_stringbuf
      on	type char:

      typedef basic_stringbuf<char> stringbuf;

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wstringbuf
      The type wstringbuf is an instantiation of	class basic_stringbuf on
      type wchar_t:

      typedef basic_stringbuf<wchar_t> wstringbuf;

 CONSTRUCTORS

   explicit basic_stringbuf(ios_base::openmode which =
 		 ios_base::in |	ios_base::out);
      Constructs an object of class basic_stringbuf, initializing
      the base class with basic_streambuf(), and initializing	the
      open mode with which.

   explicit basic_stringbuf(const string_type& str,
 		 ios_base::openmode which =
 		 ios_base::in |	ios_base::out);
      Constructs an object of class basic_stringbuf, initializing
      the base class with basic_streambuf(), and initializing	the
      open mode with which. The string object str	is copied to
      the  underlying buffer. If the opening mode is in,	initialize the
      input sequence to point at the first character of the buffer. If
      the opening mode is out, it initializes	the output sequence to
      point at	the first character of the buffer. If	the opening
      mode is out	| app, it initializes	the output sequence to
      point at	the last character of the buffer.

 DESTRUCTOR

   virtual ~basic_stringbuf();
      Destroys an object	of class basic_stringbuf.

 MEMBER FUNCTIONS

   int_type
   overflow(int_type c =	traits::eof() );
      If	the output sequence has	a put position available, and c	is not
      traits::eof(), then this functions	writes c into it. If there is
      no position available, the function increases	the size of
      the	buffer by allocating	more memory and	then writes c
      at the new current put position. If the operation fails, the
      function	returns	traits::eof(). Otherwise it returns
      traits::not_eof(c).

   int_type
   pbackfail( int_type c	= traits::eof()	);
      Puts back the character designated	by c into the input sequence.
      If traits::eq_int_type(c,traits::eof()) returns true,	the
      function moves the input sequence	one position backward. If the
      operation	fails, the function returns traits::eof(). Otherwise
      it returns traits::not_eof(c).

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,
 	 ios_base::openmode which =
 	 ios_base::in |	ios_base::out);
      If the open	mode is	in | out, this function	alters the
      stream position of	both the input and the output sequences. If
      the	open mode is in,	it alters the stream position
      of only the input sequence, and if it	is out,	it alters the
      stream position of the output sequence. The new position is
      calculated by combining the two	parameters off (displacement)
      and way (reference point). If the	current	position of the
      sequence is invalid before repositioning, the operation fails
      and the return	value is pos_type(off_type(-1)). Otherwise the
      function returns the current new	position.

   pos_type
   seekpos(pos_type sp,ios_base::openmode which =
 	 ios_base::in |	ios_base::out);
      If the open	mode is	in | out, seekpos() alters the stream
      position of both the input and the output sequences. If	the
      open mode is in, it alters the stream	position of the	input
      sequence only, and	if the open mode is out, it alters the stream
      position of the output sequence only. If the current position of
      the sequence is invalid before repositioning, the operation
      fails and the return value is pos_type(off_type(-1)). Otherwise
      the function returns the	current	new position.

   basic_streambuf<charT,traits>*
   setbuf(char_type*s, streamsize n);
      If	the string buffer object is opened in output mode, proceed as
      follows:

      if	s is not a null	pointer	and n is greater than the content of
      the current buffer, replace it	(copy its contents) by the
      buffer of size n pointed at	by s. In the case where	s is a
      null pointer and	n is greater than the content of the current
      buffer, resize it to size n. If the function fails, it
      returns	a null pointer.

   string_type
   str()	const;
      Returns a string object of	type string_type whose content is a
      copy of the underlying buffer contents.

   void
   str(const string_type& str_arg);
      Clears the	underlying buffer and copies the string	object str_arg
      into it. If the	opening	mode is	in, initializes	the input
      sequence to point at	the first character of the buffer. If
      the opening mode is out, the function initializes the output
      sequence to point at the first character of	the buffer. If
      the opening mode	is out | app, it initializes the output
      sequence to point at the last character of the	buffer.

   int_type
   underflow();
      If	the input sequence has a read position available, the function
      returns the contents of this position. Otherwise it tries to
      expand the input sequence to match the output	sequence and
      if	possible returns the content of	the new	current	position. The
      function returns traits::eof() to	indicate failure.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. The function returns the
      number of characters written.

 EXAMPLES

   //
   // stdlib/examples/manual/stringbuf.cpp
   //
   #include<iostream>
   #include<sstream>
   #include<string>

   void main ( )
   {
    using namespace std;

     // create a	read/write string-stream object	on tiny	char
     // and attach it to	an ostringstream object
    ostringstream out_1(ios_base::in | ios_base::out);

     // tie the istream object to the ostringstream object
    istream in_1(out_1.rdbuf());

     // output to out_1
    out_1 << "Here is the first output";

     // create a	string object on tiny char
    string  string_ex("l'heure est grave	!");

     // open a read only	string-stream object on	tiny char
     // and initialize it
    istringstream in_2(string_ex);

     // output in_1 to the standard output
    cout	<< in_1.str() << endl;

     // output in_2 to the standard output
    cout	<< in_2.rdbuf()	<< endl;

     // reposition in_2 at the beginning
    in_2.seekg(0);

    stringbuf::pos_type pos;

     // get the current put position
     // equivalent to
     // out_1.tellp();
    pos = out_1.rdbuf()->pubseekoff(0,ios_base::cur,
 				   ios_base::out);

     // append the content of stringbuffer
     // pointed at by in_2 to the one
     // pointed at by out_1
    out_1 << ' '	<< in_2.rdbuf();

     // output in_1 to the standard output
    cout	<< in_1.str() << endl;

     // position	the get	sequence
     // equivalent to
     // in_1.seekg(pos);
    in_1.rdbuf()->pubseekpos(pos, ios_base::in);

     // output "l'heure est grave !"
    cout	<< in_1.rdbuf()	<< endl	<< endl;
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, basic_string,
   basic_istringstream,	basic_ostringstream,
   basic_stringstream

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  38 - stringstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_stringstream

 SYNOPSIS

   #include <sstream>
   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_stringstream
   : public basic_iostream<charT, traits>

 DESCRIPTION

   The template class basic_stringstream<charT,traits,Allocator>
   provides functionality	to read	and write to an	array in
   memory. It supports writing and reading objects of class
   basic_string<charT,traits,Alocator>. It uses a basic_stringbuf
   object to control the	associated storage. It inherits	from
   basic_iostream and therefore can use all the formatted and
   unformatted output and input	functions.

 INTERFACE

   template<class charT,	class traits = char_traits<charT>,
 	  class	Allocator = allocator<void> >
   class	basic_stringstream
   : public basic_iostream<charT, traits> {

   public:

    typedef basic_stringbuf<charT, traits, Allocator>  sb_type;
    typedef basic_ios<charT, traits>		      ios_type;

    typedef basic_string<charT, traits, Allocator>     string_type;

    typedef traits			     traits_type;
    typedef charT			     char_type;
    typedef typename traits::int_type	     int_type;
    typedef typename traits::pos_type	     pos_type;
    typedef typename traits::off_type	     off_type;

    explicit basic_stringstream(ios_base::openmode which	=
 			       ios_base::out | ios_base::in);

    explicit basic_stringstream(const string_type& str,
 			       ios_base::openmode which	=
 			       ios_base::out | ios_base::in);

    virtual ~basic_stringstream();

    basic_stringbuf<charT,traits,Allocator> *rdbuf() const;
    string_type str() const;

    void	str(const string_type& str);

   };

 TYPES

   char_type
      The type char_type	is a synonym for the template parameter	charT.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type
      charT.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   sb_type
      The type sb_type is an instantiation of class basic_stringbuf on
      type charT.

   string_type
      The type string_type is an	instantiation of class basic_string on
      type charT.

   stringstream
      The type stringstream is an instantiation of class	basic_stringstream
      on type char:

        typedef basic_stringstream<char>	stringstream;

   traits_type
      The type traits_type is a synonym for the template	parameter traits.

   wstringstream
      The type wstringstream is an instantiation	of class
      basic_stringstream on	type wchar_t:

        typedef basic_stringstream<wchar_t> wstringstream;

 CONSTRUCTORS

   explicit basic_stringstream(ios_base::openmode which =
 		    ios_base::in | ios_base::out);
      Constructs an object of class basic_stringstream, initializing
      the base class	basic_iostream with the	associated string
      buffer. The string	buffer is initialized by calling the
      basic_stringbuf constructor
      basic_stringbuf<charT,traits,Allocator>(which).

   explicit basic_stringstream(const string_type& str,
 		    ios_base::openmode which =
 		    ios_base::in | ios_base::out);
      Constructs an object of class basic_stringstream, initializing
      the base class	basic_iostream with the	associated string
      buffer. The string	buffer is initialized by calling the
      basic_stringbuf constructor
      basic_stringbuf<charT,traits,Allocator>(str,which).

 DESTRUCTOR

   virtual ~basic_stringstream();
      Destroys an object	of class basic_stringstream.

 MEMBER FUNCTIONS

   basic_stringbuf<charT,traits,Allocator>*
   rdbuf() const;
      Returns a pointer to the basic_stringbuf associated with the stream.

   string_type
   str()	const;
      Returns a string object of	type string_type whose contents	is a
      copy of the underlying buffer contents.

   void
   str(const string_type& str);
      Clears the	string buffer and copies the string object str into
      it.	If the opening mode is in, initializes the input
      sequence to point at	the first character of	the buffer. If
      the opening mode	is out,	initializes the output	sequence to
      point at the first	character of the buffer. If the opening mode
      is out | app, initializes	the output sequence to point at	the
      last character of the buffer.

 EXAMPLES

   //
   // stdlib/examples/manual/stringstream.cpp
   //
   #include<iostream>
   #include<sstream>

   void main ( )
   {
    using namespace std;

     // create a	bi-directional wstringstream object
    wstringstream inout;

     // output characters
    inout << L"Das ist die rede von einem man" << endl;
    inout << L"C'est l'histoire d'un home" << endl;
    inout << L"This is the story	of a man" << endl;

    wchar_t p[100];

     // extract the first line
    inout.getline(p,100);

     // output the first	line to	stdout
    wcout << endl << L"Deutch :"	<< endl;
    wcout << p;

     // extract the seconf line
    inout.getline(p,100);

     // output the second line to stdout
    wcout << endl << L"Francais :" << endl;
    wcout << p;

     // extract the third line
    inout.getline(p,100);

     // output the third	line to	stdout
    wcout << endl << L"English :" << endl;
    wcout << p;

     // output the all content of the
     //wstringstream object to stdout
    wcout << endl << endl << inout.str();
   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_stringbuf, basic_string,
   basic_istringstream,	basic_ostringstream(3c++)

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.7.3

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  39 - strstream

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   strstream

   This page describes the ANSI strstream class.	 If you	would like
   information on the pre-ANSI strstream class,	use the
   command:

        help cxxl

 SYNOPSIS

   #include <strstream>
   class	strstream
   : public basic_iostream<char>

 DESCRIPTION

   The class strstream provides functionality to	read and write to an
   array in memory. It uses a private strstreambuf object	to
   control the associated array. It inherits from basic_iostream<char>
   and therefore can use all the formatted and	unformatted output and
   input functions.

 INTERFACE

   class	strstream
   : public basic_iostream<char>	{

   public:

    typedef char_traits<char>	       traits;

    typedef char			      char_type;
    typedef typename traits::int_type  int_type;
    typedef typename traits::pos_type  pos_type;
    typedef typename traits::off_type  off_type;

    strstream();
    strstream(char *s, int n,
 	     ios_base::openmode	= ios_base::out	| ios_base::in);

    void	freeze(int freezefl = 1);

    int pcount()	const;

    virtual ~strstream();

    strstreambuf	*rdbuf() const;

    char	*str();

   };

 TYPES

   char_type
      The type char_type	is a synonym of	type char.

   int_type
      The type int_type is a synonym of type traits::in_type.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits
      The type traits is	a synonym of type char_traits<char>.

 CONSTRUCTORS

   strstream();
      Constructs	an object of class strstream, initializing the base
      class basic_iostream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized	by calling its
      default constructor strstreambuf().

   strstream(char* s,int	n, ios_base::openmode
 	   mode	= ios_base::out	| ios_base::in);
      Constructs an object of class strstream, initializing the	base
      class basic_iostream<char> with the associated strstreambuf
      object. The strstreambuf object is initialized by	calling	one of
      two constructors:

 	      +	      if mode &	app == 0 calls strstreambuf(s,n,s)

 	      +	      Otherwise	calls strstreambuf(s,n,s + ::strlen(s))

 DESTRUCTORS

   virtual ~strstream();
      Destroys an object	of class strstream.

 MEMBER FUNCTIONS

   void
   freeze(int freezefl =	1);
      If	the mode is dynamic, alters the	freeze status of the dynamic
      array object as follows:

      +	     If	freezefl is false, the function	sets the freeze	status to
 	  frozen.

      +	     Otherwise,	it clears the freeze status.

   int
   pcount() const;
      Returns the size of the output sequence.

   strstreambuf*
   rdbuf() const;
      Returns a pointer to the strstreambuf object associated with the
      stream.

   char*
   str();
      Returns a pointer to the underlying array object which may	be null.

 EXAMPLES

   //
   // stdlib/examples/manual/strstream.cpp
   //
   #include<strstream>

   void main ( )
   {
    using namespace std;

     // create a	bi-directional strstream object
    strstream inout;

     // output characters
    inout << "Das ist die rede von einem	man" <<	endl;
    inout << "C'est l'histoire d'un home" << endl;
    inout << "This is the story of a man" << endl;

    char	p[100];

     // extract the first line
    inout.getline(p,100);

     // output the first	line to	stdout
    cout	<< endl	<< "Deutch :" << endl;
    cout	<< p;

     // extract the seconf line
    inout.getline(p,100);

     // output the second line to stdout
    cout	<< endl	<< "Francais :"	<< endl;
    cout	<< p;

     // extract the third line
    inout.getline(p,100);

     // output the third	line to	stdout
    cout	<< endl	<< "English :" << endl;
    cout	<< p;

     // output the all content of the
     // strstream object	to stdout
    cout	<< endl	<< endl	<< inout.str();

   }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   strstreambuf, istrstream, ostrstream(3c++)

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Annex D
   Compatibility features Section D.6.4

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  40 - strstreambuf

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   strstreambuf

   This page describes the ANSI strstreambuf class.  If you would like
   information on the	pre-ANSI strstreambuf class, use the command:

        help cxxl

 SYNOPSIS

   #include <strstream>
   class	strstreambuf
   : public basic_streambuf<char>

 DESCRIPTION

   The class strstreambuf is derived from basic_streambuf specialized
   on	type char to associate possibly the input sequence	and
   possibly the output sequence with	a tiny character array,	whose
   elements store arbitrary values.

   Each object of type strstreambuf controls two	character sequences:

   +	  A character input sequence;

   +	  A character output sequence.

   Note:	see basic_streambuf.

   The two sequences are	related	to each	other, but are manipulated
   separately.  This means that you can read and	write characters at
   different positions in objects of type strstreambuf without any
   conflict (in opposition to the basic_filebuf objects).

   The underlying array has several attributes:

   +	  allocated, set when a	dynamic	array has been allocated, and
        hence should be freed by the destructor of the	strstreambuf
        object.

   +	  constant, set	when the array has const elements, so the output
        sequence	cannot be written.

   +	  dynamic, set when the	array object is	allocated
        (or reallocated) as necessary to hold a character sequence that
        can change in length.

   +	  frozen, set when the program has requested that the array will
        not be altered, reallocated,	or freed.

 INTERFACE

   class	strstreambuf
   : public basic_streambuf<char> {

   public:

    typedef char_traits<char>	      traits;
    typedef basic_ios<char, traits>    ios_type;

    typedef char			      char_type;
    typedef typename traits::int_type  int_type;
    typedef typename traits::pos_type  pos_type;
    typedef typename traits::off_type  off_type;

    explicit strstreambuf(streamsize alsize = 0);
    strstreambuf(void *(*palloc)(size_t), void (*pfree)(void *));
    strstreambuf(char *gnext, streamsize	n, char	*pbeg =	0);

    strstreambuf(unsigned char *gnext, streamsize n,
 		unsigned char *pbeg = 0);
    strstreambuf(signed char *gnext, streamsize n,
 		signed char *pbeg = 0);

    strstreambuf(const char *gnext, streamsize n);
    strstreambuf(const unsigned char *gnext, streamsize n);
    strstreambuf(const signed char *gnext, streamsize n);

    virtual ~strstreambuf();

    void	freeze(bool f =	1);

    char	*str();
    int pcount()	const;

   protected:

    virtual int_type overflow(int_type c	= traits::eof());

    virtual int_type pbackfail(int_type c = traits::eof());

    virtual int_type underflow();

    virtual pos_type seekoff(off_type, ios_type::seekdir	way,
 			    ios_type::openmode which =
 			    ios_type::in | ios_type::out);

    virtual pos_type seekpos(pos_type sp, ios_type::openmode which =
 			    ios_type::in | ios_type::out);

    virtual streambuf* setbuf(char *s, streamsize n);

    virtual streamsize xsputn(const char_type* s, streamsize n);

   };

 TYPES

   char_type
      The type char_type	is a synonym of	type char.

   int_type
      The type int_type is a synonym of type traits::in_type.

   ios_type
      The type ios_type is an instantiation of class basic_ios on type char.

   off_type
      The type off_type is a synonym of type traits::off_type.

   pos_type
      The type pos_type is a synonym of type traits::pos_type.

   traits
      The type traits is	a synonym of type char_traits<char>.

 CONSTRUCTORS

   explicit strstreambuf(streamsize alsize = 0);
      Constructs	an object of class strstreambuf, initializing the base
      class with streambuf(). After initialization the	strstreambuf
      object is in dynamic mode and its array	object has a size of
      alsize.

   strstreambuf(void* (*palloc)(size_t),
 	      void (*pfree)(void*));
      Constructs an object of class strstreambuf, initializing the base
      class with streambuf(). After initialization the strstreambuf
      object is	in dynamic mode. The function used to allocate memory
      is pointed at by void*	(*palloc)(size_t) and the one used to
      free memory is	pointed	at by void (*pfree)(void*).

   strstreambuf(char* gnext, streamsize n,
 	      char* pbeg = 0);
   strstreambuf(signed char* gnext, streamsize n,
 	      signed char* pbeg	= 0);
   strstreambuf(unsigned	char* gnext, streamsize	n,
 	      unsigned char* pbeg = 0);
      Constructs an object of class strstreambuf, initializing the base
      class with streambuf(). The argument gnext point to the first
      element of an array object whose	number of elements is:

 		n, if n	> 0
 		 ::strlen(gnext), if n == 0
 		INT_MAX, if n <	0

 		If pbeg	is a null pointer set only the input sequence
                 to gnext, otherwise set also the output sequence to
                 pbeg.

   strstreambuf(const char* gnext, streamsize n);
   strstreambuf(const signed char* gnext, streamsize n);
   strstreambuf(const unsigned char* gnext, streamsize n);
      Constructs	an object of class strstreambuf, initializing the base
      class with streambuf(). The argument gnext point	to the first
      element of	an array object whose	number of elements is:

     n, if n > 0
      ::strlen(gnext), if n == 0
     INT_MAX, if	n < 0

     Set	the input sequence to gnext and	the mode to constant.

 DESTRUCTORS

   virtual ~strstreambuf();
      Destroys an object	of class strstreambuf. The function frees the
      dynamically allocated array object only if allocated is set and
      frozen is not set.

 MEMBER FUNCTIONS

   void
   freeze(bool freezefl = 1);
      If	the mode is dynamic, alters the	freeze status of the dynamic
      array as follows:

      +	     If	freezefl is false, the function	sets the freeze	status
           to frozen.

      +	     Otherwise,	it clears the freeze status.

   int_type
   overflow( int_type c = traits::eof() );
      If	the output sequence has	a put position available, and c	is not
      traits::eof(), then write c into it. If there is no position
      available, the function grow the size	of the array object by
      allocating more memory and then write c at the new current put
      position. If dynamic is not set or	if frozen is set the operation
      fails. The function returns traits::not_eof(c), except	if it
      fails, in	which case it returns traits::eof().

   int_type
   pbackfail( int_type c	= traits::eof()	);
      Puts back the character designated	by c into the input sequence.
      If traits::eq_int_type(c,traits::eof()) returns true,	move
      the input sequence one position backward. If	the operation
      fails, the function returns traits::eof(). Otherwise it returns
      traits::not_eof(c).

   int
   pcount() const;
      Returns the size of the output sequence.

   pos_type
   seekoff(off_type off,	ios_base::seekdir way,
 	 ios_base::openmode which =
 	 ios_base::in |	ios_base::out);
      If the open mode is	in | out, alters the stream position
      of	both the input and the output sequence. If the open
      mode	is in, alters the	stream position	of only	the
      input sequence, and	if it is out, alters the stream
      position of only the output sequence. The	new position is
      calculated by combining	the two	parameters off (dis-
      placement) and way (reference point). If the current position of
      the sequence is invalid before repositioning, the
      operation	fails and the return value is
      pos_type(off_type(-1)). Otherwise the function returns the
      current new position.

   pos_type
   seekpos(pos_type sp,ios_base::openmode which =
 	 ios_base::in |	ios_base::out);
      If the open	mode is	in | out, alters the stream position
      of	both the	input and the output sequence. If the open
      mode	is in, alters the	stream position	of only	the
      input sequence, and	if it is out, alters the stream
      position of only the output sequence. If the current position of
      the sequence is	invalid	before repositioning, the
      operation fails	and the	return value is	pos_type(off_type(-
      1)). Otherwise the function	returns	the current new
      position.

   strstreambuf*
   setbuf(char* s, streamsize n);
      If	dynamic	is set and freeze is not, proceed as follows:

      If	s is not a null	pointer	and n is greater than the number of
      characters already in  the current array, replaces it (copy its
      contents) by the array of size n pointed at by s.

   char*
   str();
      Calls freeze(), then returns the beginning	pointer	for the	input
      sequence.

   int_type
   underflow();
      If	the input sequence has a read position available, returns the
      content of	this position. Otherwise tries to expand the input
      sequence to match the output	sequence and if	possible
      returns the content of	the new current position. The function
      returns traits::eof() to indicate failure.

      In	the case where s is a null pointer and n is greater than the
      number of	characters already in  the current array, resize it to
      size n.

      If	the function fails, it returns a null pointer.

   streamsize
   xsputn(const char_type* s, streamsize	n);
      Writes up to n characters to the output sequence. The characters
      written are obtained from successive elements of the array	whose
      first element is	designated by s. The function returns the
      number of characters written.

 EXAMPLES

   //
   // stdlib/examples/manual/strstreambuf.cpp
   //
   #include<iostream>
   #include<strstream>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

     // create a	read/write strstream object
     // and attach it to	an ostrstream object
    ostrstream out;

     // tie the istream object to the ostrstream	object
    istream in(out.rdbuf());

     // output to out
    out << "anticonstitutionellement is a big word !!!";

     // create a	NTBS
    char	*p ="Le	rat des	villes et le rat des champs";

     // output the NTBS
    out << p << endl;

     // resize the buffer
    if (	out.rdbuf()->pubsetbuf(0,5000) )
     cout << endl << "Success in	allocating the buffer" << endl;

     // output the all buffer to	stdout
    cout	<< in.rdbuf( );

     // output the decimal conversion of	100 in hex
     // with right padding and a	width field of 200
    out << dec << setfill('!') << setw(200) << 0x100 << endl;

     // output the content of the input sequence	to stdout
    cout	<< in.rdbuf( ) << endl;

     // number of elements in the output	sequence
    cout	<< out.rdbuf()->pcount() << endl;

     // resize the buffer to a minimum size
    if (	out.rdbuf()->pubsetbuf(0,out.rdbuf()->pcount())	)
     cout << endl << "Success in	resizing the buffer" <<	endl;

     // output the content of the all array object
    cout	<< out.rdbuf()->str() << endl;

    }

 SEE ALSO

   char_traits,	ios_base, basic_ios,
   basic_streambuf, istrstream(3c++), ostrstream,
   strstream(3c++)

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Annex D
   Compatibility features Section D.5

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  41 - wcerr

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   wcerr

 SYNOPSIS

   #include <iostream>
   extern wostream wcerr;

 DESCRIPTION

   wostream wcerr;
      The object	wcerr controls output to an unbuffered stream buffer
      associated with the object stderr declared in <cstdio>. By
      default the standard C and	C++ streams are	synchronized,
      but you can improve performance by	using the ios_base member
      function synch_with_stdio to desynchronize them.

      wcerr uses	the locale codecvt facet to convert the	wide
      characters	it receives to the tiny characters it	outputs	to
      stderr.

 FORMATTING

   The formatting is done through member	functions or manipulators. See
   cout, wcout	or basic_ostream for details.

 EXAMPLES

   //
   // wcerr example
   //
   #include<iostream>
   #include<fstream>

   void main ( )
   {
    using namespace std;

     // open the	file "file_name.txt"
     // for reading
    wifstream in("file_name.txt");

     // output the all file to stdout
    if (	in )
      wcout << in.rdbuf();
    else
       // if the	wifstream object is in a bad state
       // output	an error message to stderr
      wcerr << L"Error while opening the	file" << endl;
   }

 SEE ALSO

   basic_ostream, iostream, basic_filebuf,
   cout, cin, cerr, clog, wcin,
   wcout, wclog, iomanip, ios_base,
   basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  42 - wcin

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   wcin

 SYNOPSIS

   #include <iostream>
   extern wistream wcin;

 DESCRIPTION

   wistream wcin;
      The object	wcin controls input from a stream buffer associated
      with the object stdin declared in <cstdio>.	By default the
      standard	C and C++ streams are synchronized, but performance
      improvement can be achieved by using the ios_base	member
      function	synch_with_stdio to desynchronize them.

      After the object wcin is initialized, wcin.tie() returns &wcout,
      which implies that wcin and wcout are synchronized. wcin	uses
      the locale codecvt facet to convert the tiny characters extracted
      from stdin to the wide characters stored in the wcin
      buffer.

 EXAMPLES

   //
   // wcin example one
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    int i;
    float f;
    wchar_t c;

     //read an integer, a float and a wide character from stdin
    wcin	>> i >>	f >> c;

     // output i, f and c to stdout
    wcout << i << endl << f << endl << c	<< endl;
   }

   //
   // wcin example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    wchar_t p[50];

     // remove all the white spaces
    wcin	>> ws;

     // read characters from stdin until	a newline
     // or 49 characters	have been read
    wcin.getline(p,50);

     // output the result to stdout
    wcout << p;
   }

      When inputting "  Grendel the monster" (newline) in the previous
      test, the output	will be	"Grendel the monster". The manipulator
      ws removes spaces.

 SEE ALSO

   basic_istream, iostream, basic_filebuf,
   cin,	cout, cerr, clog, wcout,
   wcerr, wclog, ios_base, basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.2

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  43 - wclog

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   wclog

 SYNOPSIS

   #include <iostream>
   extern wostream wclog;

 DESCRIPTION

   wostream wclog;
      The object	wclog controls output to a stream buffer associated
      with the object stderr declared in <cstdio>. The difference
      between	wclog and wcerr is that wclog is buffered, but wcerr
      isn't .	Therefore, commands like wclog	<< L"ERROR !!";	and
      fprintf(stderr,"ERROR !!");	are not	synchronized.	 wclog
      uses the	locale codecvt facet to	convert	the wide characters
      it receives to the tiny	characters it outputs to stderr.

 FORMATTING

   The formatting is done through member	functions or manipulators. See
   cout, wcout	or basic_ostream for details.

 EXAMPLES

   //
   // wclog example
   //
   #include<iostream>
   #include<fstream>

   void main ( )
   {
    using namespace std;

     // open the	file "file_name.txt"
     // for reading
    wifstream in("file_name.txt");

     // output the all file to stdout
    if (	in )
      wcout << in.rdbuf();
    else
       // if the	wifstream object is in a bad state
       // output	an error message to stderr
      wclog << L"Error while opening the	file" << endl;
   }

 WARNINGS

   wclog	can be used to redirect	some of	the errors to another
   recipient. For example, you might want to redirect them to a	file
   named my_err:

   wofstream out("my_err");

   if ( out )
    wclog.rdbuf(out.rdbuf());
   else
    cerr	<< "Error while	opening	the file" << endl;

   Then when you	are doing something like wclog << L"error number x";
   the error	message	is output to the file my_err.  Obviously, you
   can use the same scheme to redirect wclog	to other devices.

 SEE ALSO

   basic_ostream, iostream, basic_filebuf,
   cout, cin, cerr, clog, wcin,
   wcout, wcerr, iomanip, ios_base,
   basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  44 - wcout

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   wcout

 SYNOPSIS

   #include <iostream>
   extern wostream wcout;

 DESCRIPTION

   wostream wcout;
      The object	wcout controls output to a stream buffer associated
      with the object stdout declared in <cstdio>.  By default the
      standard C and	C++ streams are synchronized, but performance
      can be improved by using	the ios_base member function
      synch_with_stdio to desynchronize	them.

      After the object wcin is initialized, wcin.tie() returns &wcout,
      which implies that wcin and wcout are synchronized.  wcout uses
      the locale codecvt facet to convert the wide characters it
      receives to the tiny characters	it outputs to stdout.

 FORMATTING

   The formatting is done through member	functions or manipulators.

   Manipulators			   Member Functions

   showpos			   setf(ios_base::showpos)
   noshowpos			   unsetf(ios_base::showpos)
   showbase			   setf(ios_base::showbase)
   noshowbase			   unsetf(ios_base::showbase)
   uppercase			   setf(ios_base::uppercase)
   nouppercase			   unsetf(ios_base::uppercase)
   showpoint			   setf(ios_base::showpoint)
   noshowpoint			   unsetf(ios_base::showpoint)
   boolalpha			   setf(ios_base::boolalpha)
   noboolalpha			   unsetf(ios_base::boolalpha)
   unitbuf			   setf(ios_base::unitbuf)
   nounitbuf			   unsetf(ios_base::unitbuf)
   internal			   setf(ios_base::internal,
 				      ios_base::adjustfield)
   left				   setf(ios_base::left,
 				      ios_base::adjustfield)
   right				   setf(ios_base::right,
 				      ios_base::adjustfield)
   dec				   setf(ios_base::dec,
 				      ios_base::basefield)
   hex				   setf(ios_base::hex,
 				      ios_base::basefield)
   oct				   setf(ios_base::oct,
 				      ios_base::basefield)
   fixed				   setf(ios_base::fixed,
 				      ios_base::floatfield)
   scientific			   setf(ios_base::scientific,
 				      ios_base::floatfield)
   resetiosflags
    (ios_base::fmtflags flag)	   setf(0,flag)
   setiosflags
    (ios_base::fmtflags flag)	   setf(flag)
   setbase(int base)		   See above
   setfill(char_type c)		   fill(c)
   setprecision(int n)		   precision(n)
   setw(int n)			   width(n)
   endl
   ends
   flush				   flush( )

 DESCRIPTION

   showpos   Generates a	+ sign in non-negative generated numeric output.

   showbase   Generates a prefix	indicating the numeric base of generated
 	     integer output.

   uppercase   Replaces certain lowercase letters with their uppercase
 	      equivalents in generated output.

   showpoint   Generates	a decimal-point	character unconditionally in
               generated floating-point output.

   boolalpha   Inserts and extracts bool	type in	alphabetic format.

   unitbuf   Flushes output after each output operation.

   internal   Adds fill characters at a designated internal point in
              certain generated output, or identical to right if	no such
              point is designated.

   left	 Adds fill characters on the right (final positions) of	certain
          generated	output.

   right	  Adds fill characters on the left (initial positions) of certain
 	  generated output.

   dec	Converts integer input or generates integer output in decimal
         base.

   hex	Converts integer input or generates integer output in hexadecimal
 	base.

   oct	Converts integer input or generates integer output in octal base.

   fixed	  Generates floating-point output in fixed-point notation.

   scientific   Generates floating-point	output in scientific notation.

   resetiosflagss

   (ios_base::fmtflags flag)   Resets the fmtflags field	flag

   setiosflags

   (ios_base::fmtflags flag)   Sets up the flag flag

   setbase(int base)   Converts integer input or	generates integer output
                       in base base. The parameter base can	be 8,
                       10 or 16.

   setfill(char_type c)	 Sets the character used to pad	(fill) an output
 			 conversion to the specified field width.

   setprecision(int n)	Sets the precision (number of digits after the
 			decimal	point) to generate on certain output
                         conversions.

   setw(int n)	Sets the field with (number of characters) to generate on
 		certain	output conversions.

   endl	 Inserts a newline character into the output sequence and flush
          the output	buffer.

   ends	 Inserts a null	character into the output sequence.

   flush	  Flushes the output buffer.

 DEFAULT	VALUES

   precision()		 6
   width()		 0
   fill()		 the space character
   flags()		 skipws	| dec
   getloc()		 locale::locale()

 EXAMPLES

   //
   // wcout example one
   //
   #include<iostream>
   #include<iomanip>

   void main ( )
   {
    using namespace std;

    int i;
    float f;

     // read an integer and a float from	stdin
    cin >> i >> f;

     // output the integer and goes at the line
    wcout << i << endl;

     // output the float	and goes at the	line
    wcout << f << endl;

     // output i	in hexa
    wcout << hex	<< i <<	endl;

     // output i	in octal and then in decimal
    wcout << oct	<< i <<	dec << i << endl;

     // output i	preceded by its	sign
    wcout << showpos << i << endl;

     // output i	in hexa
    wcout << setbase(16)	<< i <<	endl;

     // output i	in dec and pad to the left with	character
     // @ until a width of 20
     // if you input 45 it outputs 45@@@@@@@@@@@@@@@@@@
    wcout << setfill(L'@') << setw(20) << left << dec <<	i;
    wcout << endl;

     // output the same result as the code just above
     // but uses	member functions rather	than manipulators
    wcout.fill('@');
    wcout.width(20);
    wcout.setf(ios_base::left, ios_base::adjustfield);
    wcout.setf(ios_base::dec, ios_base::basefield);
    wcout << i << endl;

     // outputs f in scientific notation	with
     // a precision of 10 digits
    wcout << scientific << setprecision(10) << f	<< endl;

     // change the precision to 6 digits
     // equivalents to wcout << setprecision(6);
    wcout.precision(6);

     // output f	and goes back to fixed notation
    wcout << f << fixed << endl;

   }

   //
   // wcout example two
   //
   #include <iostream>

   void main ( )
   {
    using namespace std;

    wchar_t p[50];

    wcin.getline(p,50);

    wcout << p;
   }

   //
   // wcout example three
   //
   #include <iostream>
   #include <fstream>

   void main ( )
   {
    using namespace std;

     // open the	file "file_name.txt"
     // for reading
    wifstream in("file_name.txt");

     // output the all file to stdout
    if (	in )
      wcout << in.rdbuf();
    else
       {
        wcout <<	"Error while opening the file";
        wcout <<	endl;
       }
   }

 WARNINGS

   Keep in mind that the	manipulator endl flushes the stream buffer.
   Therefore it is	recommended to use L'0 if your only intent is
   to go at the line. It will greatly improve performance when	C and
   C++ streams are not synchronized.

 SEE ALSO

   basic_ostream, iostream, basic_filebuf,
   cin,	cout, cerr, clog, wcin,
   wcerr, wclog, iomanip, ios_base,
   basic_ios

   Working Paper	for Draft Proposed International Standard for
   Information Systems--Programming Language	C++, Section 27.3.1

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee

  45 - wstring

 			   Standard C++	Library
 		 Copyright 1996, Rogue Wave Software, Inc.

 NAME

   basic_string,string  - A templated class for handling	sequences of
   character-like entities.  string and wstring are specialized
   versions	of basic_string for chars and wchar_ts, respectively.

   This page describes the ANSI basic_string class.  If you would like
   information on the	pre-ANSI string	class, use the command:

        help cxxl

   typedef basic_string <char> string;
   typedef basic_string <wchar_t> wstring;

 SYNOPSIS

   #include <string>

   template <class charT,
 	   class traits	= char_traits<charT>,
 	   class Allocator = allocator<charT> >

   class	basic_string;

 DESCRIPTION

   basic_string<charT, traits, Allocator> is a homogeneous collection
   of character-like entities.  It provides	general	string
   functionality such as compare, append, assign, insert, remove, and
   replace , along with various searches.  basic_string also functions
   as an STL sequence container, providing random	access
   iterators.  This	allows some of the generic algorithms to apply
   to strings.

   Any underlying character-like	type may be used as long as an
   appropriate string_char_traits class is provided or the default
   traits class is applicable.

 INTERFACE

   template <class charT,
 	   class traits	= char_traits<charT>,
 	   class Allocator = allocator<charT> >
   class	basic_string {

   public:

   // Types

   typedef traits			       traits_type;
   typedef typename traits::char_type	       value_type;
   typedef Allocator			       allocator_type;

   typename size_type;
   typename difference_type;
   typename reference;
   typename const_reference;
   typename pointer;
   typename const_pointer;
   typename iterator;
   typename const_iterator;
   typename const_reverse_iterator;
   typename reverse_iterator;

   static const size_type npos =	-1;

   // Constructors/Destructors

   explicit basic_string(const Allocator& = Allocator());
   basic_string (const basic_string<charT, traits, Allocator>&);
   basic_string(const basic_string&, size_type, size_type = npos);
   basic_string(const charT*, size_type,
 	      const Allocator& = Allocator());
   basic_string(const charT*, Allocator&	= Allocator());
   basic_string(size_type, charT,
 	      const Allocator& = Allocator());
   template <class InputIterator>
   basic_string(InputIterator, InputIterator,
 	      const Allocator& = Allocator());
   ~basic_string();

   // Assignment	operators
   basic_string&	operator=(const	basic_string&);
   basic_string&	operator=(const	charT*);
   basic_string&	operator=(charT);

   // Iterators

   iterator	 begin();
   const_iterator begin() const;
   iterator	 end();
   const_iterator end() const;

   reverse_iterator	 rbegin();
   const_reverse_iterator rbegin() const;
   reverse_iterator	 rend();
   const_reverse_iterator rend()	const;

   // Capacity

     size_type	    size() const;
     size_type	    length() const;
     size_type	    max_size() const;
     void	    resize(size_type, charT);
     void	    resize(size_type);
     size_type	    capacity() const;
     void	    reserve(size_type);
     bool	    empty() const;

   // Element access

     const_reference operator[](size_type) const;
     reference	    operator[](size_type);
     const_reference at(size_type) const;
     reference	    at(size_type);

   // Modifiers

     basic_string& operator+=(const basic_string&);
     basic_string& operator+=(const charT*);
     basic_string& operator+=(charT);

     basic_string& append(const basic_string&);
     basic_string& append(const basic_string&,
 			 size_type, size_type);
     basic_string& append(const charT*, size_type);
     basic_string& append(const charT*);
     basic_string& append(size_type, charT);
     template<class InputIterator>
      basic_string& append(InputIterator, InputIterator);

     basic_string& assign(const basic_string&);
     basic_string& assign(const basic_string&,
 			 size_type, size_type);
     basic_string& assign(const charT*, size_type);
     basic_string& assign(const charT*);
     basic_string& assign(size_type, charT);
     template<class InputIterator>
      basic_string& assign(InputIterator, InputIterator);

     basic_string& insert(size_type, const basic_string&);
     basic_string& insert(size_type, const basic_string&,
 			 size_type, size_type);
     basic_string& insert(size_type, const charT*, size_type);
     basic_string& insert(size_type, const charT*);
     basic_string& insert(size_type, size_type, charT);
     iterator insert(iterator, charT = charT());
     void insert(iterator, size_type, charT);
     template<class InputIterator>
      void insert(iterator, InputIterator,
 		InputIterator);

     basic_string& erase(size_type = 0, size_type= npos);
     iterator erase(iterator);
     iterator erase(iterator, iterator);

     basic_string& replace(size_type, size_type,
 			  const	basic_string&);
     basic_string& replace(size_type, size_type,
 			  const	basic_string&,
 			  size_type, size_type);
     basic_string& replace(size_type, size_type,
 			  const	charT*,	size_type);
     basic_string& replace(size_type, size_type,
 			  const	charT*);
     basic_string& replace(size_type, size_type,
 			  size_type, charT);
     basic_string& replace(iterator, iterator,
 			  const	basic_string&);
     basic_string& replace(iterator, iterator,
 			  const	charT*,	size_type);
     basic_string& replace(iterator, iterator,
 			  const	charT*);
     basic_string& replace(iterator, iterator,
 			  size_type, charT);
     template<class InputIterator>
      basic_string& replace(iterator, iterator,
 			  InputIterator, InputIterator);

     size_type copy(charT*, size_type, size_type	= 0);
     void swap(basic_string<charT, traits, Allocator>&);

   // String operations

     const charT* c_str() const;
     const charT* data()	const;
     const allocator_type& get_allocator() const;

     size_type find(const basic_string&,
 		   size_type = 0) const;
     size_type find(const charT*,
 		   size_type, size_type) const;
     size_type find(const charT*, size_type = 0)	const;
     size_type find(charT, size_type = 0) const;
     size_type rfind(const basic_string&,
 		    size_type =	npos) const;
     size_type rfind(const charT*,
 		    size_type, size_type) const;
     size_type rfind(const charT*,
 		    size_type =	npos) const;
     size_type rfind(charT, size_type = npos) const;

     size_type find_first_of(const basic_string&,
 			    size_type =	0) const;
     size_type find_first_of(const charT*,
 			    size_type, size_type) const;
     size_type find_first_of(const charT*,
 			    size_type =	0) const;
     size_type find_first_of(charT, size_type = 0) const;

     size_type find_last_of(const basic_string&,
 			   size_type = npos) const;
     size_type find_last_of(const charT*,
 			   size_type, size_type) const;
     size_type find_last_of(const charT*, size_type = npos) const;
     size_type find_last_of(charT, size_type = npos) const;

     size_type find_first_not_of(const basic_string&,
 				size_type = 0) const;
     size_type find_first_not_of(const charT*,
 				size_type, size_type) const;
     size_type find_first_not_of(const charT*, size_type	= 0) const;
     size_type find_first_not_of(charT, size_type = 0) const;

     size_type find_last_not_of(const basic_string&,
 			       size_type = npos) const;
     size_type find_last_not_of(const charT*,
 			       size_type, size_type) const;
     size_type find_last_not_of(const charT*,
 			       size_type = npos) const;
     size_type find_last_not_of(charT, size_type	= npos)	const;

     basic_string substr(size_type = 0, size_type = npos) const;
     int	compare(const basic_string&) const;
     int	compare(size_type, size_type, const basic_string&) const;
     int	compare(size_type, size_type, const basic_string&,
 		size_type, size_type) const;
     int	compare(size_type, size_type, charT*) const;
     int	compare(charT*)	const;
     int	compare(size_type, size_type, const charT*, size_type) const;
   };

   // Non-member	Operators

   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&,
 			  const	basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (charT, const basic_string&);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&, const charT*);
   template <class charT, class traits, class Allocator>
   basic_string operator+ (const	basic_string&, charT);

   template <class charT, class traits, class Allocator>
   bool operator== (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator== (const charT*, const basic_string&);
   template <class charT, class traits ,	class Allocator>
   bool operator== (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator< (const	basic_string&, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator< (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator< (const	basic_string&, const charT*);

   template <class charT, class traits, class Allocator>
   bool operator!= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator!= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator!= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator> (const	basic_&, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator> (const	charT*,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator> (const	basic_string&, const charT*);

   template <class charT, class traits, class Allocator>
   bool operator<= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator<= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator<= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   bool operator>= (const basic_string&,	const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator>= (const charT*, const basic_string&);
   template <class charT, class traits, class Allocator>
   bool operator>= (const basic_string&,	const charT*);

   template <class charT, class traits, class Allocator>
   void swap(basic_string<charT,traits,Allocator>& a,
 	   basic_string<charT,traits,Allocator>& b);

   template<class charT,	class traits, class Allocator>
   istream& operator>> (istream&, basic_string&);
   template <class charT, class traits, class Allocator>
   ostream& operator<< (ostream&, const basic_string&);
   template <class Stream, class	charT,
 	   class traits, class Allocator>
   Stream& getline (Stream&, basic_string&, charT);

 CONSTRUCTORS AND DESTRUCTORS

   In all cases,	the Allocator parameter	will be	used for storage
   management.

   explicit
   basic_string (const Allocator& a = Allocator());
      The default constructor.  Creates a basic_string with the
      following effects:

      data()   a	non-null pointer that is copyable and can have 0
               added to it

      size()   0

      capacity()	  an unspecified value

   basic_string (const basic_string<T, traits, Allocator>& str);
      Copy constructor. Creates a string	that is	a copy of str.

   basic_string (const basic_string &str, size_type pos,
 	       size_type n= npos);
      Creates a string if pos<=size() and determines length	rlen
      of initial string value as the smaller of n and str.size() - pos.
      This has the following	effects:

      data()   points at the first element of an allocated copy
 	      of rlen elements of the string controlled by	str
               beginning at	position pos

      size()   rlen

      capacity()   a value at least	as large as size()

      get_allocator()   str.get_allocator()

      An out_of_range exception will be thrown if pos>str.size().

   basic_string (const charT* s,	size_type n,
 	       const Allocator&	a = Allocator());
      Creates a string that	contains the first n characters	of s.
      s must not be	a NULL pointer.	 The effects of	this con-
      structor are:

      data()   points at the first element of an allocated copy
 	      of the array	whose first element is pointed at by
 	      s

      size()   n

      capacity()   a value at least	as large as size()

      An out_of_range exception will be thrown if n	== npos.

   basic_string (const charT * s,
 	       const Allocator&	a = Allocator());
      Constructs a string containing all characters	in s up	to,
      but not including, a traits::eos() character.	s must not be
      a null pointer. The effects of this constructor are:

      data()   points at the first element of an allocated copy
               of the array	whose first element is pointed at by
               s

      size()   traits::length(s)

      capacity()   a value at least	as large as size()

   basic_string (size_type n, charT c,
 	       const Allocator&	a  = Allocator());
      Constructs a string containing n repetitions of c.  A
      length_error exception is thrown if n	== npos.  The effects
      of this constructor are:

      data()   points at the first element of an allocated array
               of n	elements, each storing the initial value c

      size()   n

      capacity()   a value at least	as large as size()

   template <class InputIterator>
   basic_string	(InputIterator first, InputIterator last,
 		const Allocator& a = Allocator());
      Creates a basic_string of length last - first, filled with all
      values obtained by dereferencing	the InputIterators on the
      range [first, last). The	effects	of this	constructor are:

      data()   points at the first	element	of an allocated	copy
               of the elements in the range [first,last)

      size()   distance between first and last

      capacity()	a value	at least as large as size()

   ~basic_string	();
      Releases any allocated memory for this basic_string.

 OPERATORS

   basic_string&
   operator= (const basic_string& str);
      Assignment	operator. Sets the contents of this string to be the
      same as str.  The effects of operator= are:

      data()   points at	the first element of an	allocated copy of the array
 	      whose first element is pointed at	by str.size()

      size()   str.size()

      capacity()	  a value at least as large as size()

   basic_string&
   operator= (const charT * s);
      Assignment	operator. Sets the contents of this string to be the
      same as s up to, but not including, the traits::eos() character.

   basic_string&
   operator= (charT c);
      Assignment	operator. Sets the contents of this string to be equal
      to the single charT c.

   const_reference
   operator[] (size_type	pos) const;
   reference
   operator[] (size_type	pos);
      If	pos < size(), returns the element at position pos in this
      string. If	pos == size(),	the const version returns
      traits::eos(), the behavior of	the non-const version is
      undefined.  The reference returned by either version is
      invalidated by any call	to c_str(), data(), or any non-const
      member function for the object.

   basic_string&
   operator+= (const basic_string& s);
   basic_string&
   operator+= (const charT* s);
   basic_string&
   operator+= (charT c);
      Concatenates a string onto	the current contents of	this string.
      The second member operator uses traits::length() to determine the
      number of elements from s to	add.  The third	member
      operator	adds the single	character c.  All return a reference
      to this string after completion.

 ITERATORS

   iterator begin ();
   const_iterator begin () const;
      Return an iterator	initialized to the first element of the
      string.

   iterator end ();
   const_iterator end ()	const;
      Return an iterator	initialized to the position after the last
      element of the string.

   reverse_iterator rbegin ();
   const_reverse_iterator rbegin	() const;
      Returns an	iterator equivalent to reverse_iterator(end()).

   reverse_iterator rend	();
   const_reverse_iterator rend () const;
      Returns an	iterator equivalent to reverse_iterator(begin()).

 ALLOCATOR

   const	allocator_type get_allocator ()	const;
      Returns a copy of the allocator used by self for storage
      management.

 MEMBER FUNCTIONS

   basic_string&
   append (const	basic_string& s, size_type pos,	size_type npos);
   basic_string&
   append (const	basic_string& s);
   basic_string&
   append (const	charT* s, size_type n);
   basic_string&
   append (const	charT* s);
   basic_string&
   append (size_type n, charT c );
   template<class InputIterator>
   basic_string&
   append (InputIterator	first, InputIterator last);
      Append another string to the end of this string.  The first two
      functions append the lesser of n and s.size() - pos characters of
      s, beginning at position pos to this string.	 The second
      member will	throw an	out_of_range exception if pos
      >	str.size().  The third member appends n characters of the
      array pointed to by s.	 The fourth variation appends elements
      from the array pointed to	by s up	to, but	not including, a
      traits::eos() character.  The fifth variation appends n
      repetitions of c.	 The final append function appends the
      elements	specified in the range [first, last).

      All functions will	throw a	length_error exception if the
      resulting length will exceed	max_size().  All return	a
      reference to this string after completion.

   basic_string&
   assign (const	basic_string& s);
   basic_string&
   assign (const	 basic_string& s,
 	size_type pos, size_type n);
   basic_string&
   assign (const	charT* s, size_type n);
   basic_string&
   assign (const	charT* s);
   basic_string&
   assign (size_type n, charT c );
   template<class InputIterator>
   basic_string&
   assign (InputIterator	first, InputIterator last);

      Replace the value of this string with the value of	another.

      All versions of the function assign values	to this	string.	 The
      first two variations assign the lesser of n and s.size()	- pos
      characters of s,	beginning at position pos.  The	second
      variation throws	an out_of_range exception if pos > str.size().
      The third version of the function assigns n	characters of
      the array	pointed	to by s.  The fourth version assigns elements
      from the array pointed to	by s up	to, but	not including,	a
      traits::eos()	character.  The	fifth assigns one or n
      repetitions of c.	The last variation assigns the members
      specified by the range [first, last).

      All functions will	throw a	length_error  exception	if the
      resulting length will exceed	max_size(). All	return a
      reference to this string after completion.

   const_reference
   at (size_type	pos) const;
   reference
   at (size_type	pos);
      If	pos < size(), returns the element at position pos in this
      string. Otherwise,	an out_of_range	exception is thrown.

   size_type
   capacity () const;
      Returns the current storage capacity of the string. This is
      guaranteed to	be at least as large as	size().

   int
   compare (const basic_string& str);
      Returns the result	of a lexicographical comparison	between
      elements of this string and elements of str.  The return value
      is:

      <0	    if size() <	str.size()
      0	    if size() == str.size()
      >0	    if size() >	str.size()

   int
   compare (size_type pos1, size_type n1,
 	  const	basic_string& str) const;
   int
   compare (size_type pos1, size_type n1, const basic_string& str,
 	  size_type pos2, size_type n2)	const;
   int
   compare (charT* s) const;
   int
   compare (size_type pos, size_type n1,	charT* s) const;
   int
   compare (size_type pos, size_type n1,	charT* s,
 	  size_type n2)	const;
      Return the	result of a lexicographical comparison between ele-
      ments of this string and a	given comparison string. The members
      return, respectively:

 	  compare (str)
 	  compare (basic_string	(str, pos2, n2))
 	  compare (basic_string(s))
 	  compare (basic_string(s, npos))
 	  compare (basic_string	(s,n2))

   size_type
   copy (charT* s, size_type n,	size_type pos =	0) const;
      Replaces elements in memory with copies of	elements from this
      string. An	out_of_range exception will be thrown if pos > size().
      The lesser of n and size() - pos	 elements of this string,
      starting at position pos are copied	into the array pointed
      to by s.	 No terminating	null is appended to s.

   const	charT*
   c_str	() const;
   const	charT*
   data () const;
      Return a pointer to the initial element of	an array whose first
      size() elements are copies of the	elements in this string.  A
      traits::eos() element is	appended to the	end.  The elements of
      the array	may not	be altered, and the returned pointer is only
      valid until a non-const member function of this string is
      called.	If size() is zero, the data() function returns a
      NULL pointer.

   bool empty ()	const;
      Returns size() == 0.

   basic_string&
   erase	(size_type pos = 0, size_type n	= npos);
   iterator
   erase	(iterator p);
   iterator
   erase	(iterator first, iterator last);
      This function removes elements from the string, collapsing	the
      remaining elements, as necessary, to	remove any space left
      empty.  The first	version of the function removes the smaller
      of n and size() -	pos  starting at	position pos.  An
      out_of_range exception will be thrown	if  pos	> size().  The
      second version requires  that p is a	valid iterator on this
      string, and removes the character referred to	by p. The last
      version of erase requires that both first and	last are valid
      iterators on this string, and removes the characters defined by
      the range [first, last).  The destructors for all removed
      characters	are called.   All versions of erase return a
      reference to this string after completion.

   size_type
   find (const basic_string& str, size_type pos = 0) const;
      Searches for the first occurrence of the substring	specified by
      str in this string, starting at position pos.  If	found, it
      returns the index of	the first character of the matching
      substring.	If not found, returns npos. Equality is defined by
      traits::eq().

   size_type
   find (const charT* s,	size_type pos, size_type n) const;
   size_type
   find (const charT* s,	size_type pos =	0) const;
   size_type
   find (charT c, size_type pos = 0) const;
      Search for	the first sequence of characters in this string	that
      match a specified string.	The variations of this function
      return,	respectively:

      find(basic_string(s,n), pos)
      find(basic_string(s), pos)
      find(basic_string(1, c), pos)

   size_type
   find_first_not_of (const basic_string& str,
 		    size_type pos = 0) const;
      Searches	for the	first element of this string at	or after
      position pos that is not equal to any element of str.  If	found,
      find_first_not_of returns the index of the non-matching
      character. If all of the characters match, the function returns
      npos.  Equality is defined by traits::eq().

   size_type
   find_first_not_of  (const charT* s,
 		     size_type pos, size_type n) const;
   size_type
   find_first_not_of (const charT* s,
 		    size_type pos = 0) const;
   size_type
   find_first_not_of (charT c, size_type	pos = 0) const;
      Search for	the first element in this string at or after position
      pos that is not equal to any element of a given set of
      characters.  The members return, respectively:

      find_first_not_of(basic_string(s,n), pos)
      find_first_not_of(basic_string(s),	pos)
      find_first_not_of(basic_string(1, c), pos)

   size_type
   find_first_of(const basic_string& str,
 	       size_type pos = 0) const;
      Searches for the first occurrence at or after	position pos
      of any element of str	in this	string.	 If found, the index
      of this matching character is	 returned.  If not found, npos
      is returned.  Equality is defined by traits::eq().

   size_type
   find_first_of(const charT*  s,  size_type  pos,
 	       size_type n) const;
   size_type
   find_first_of(const charT* s,	size_type pos =	0) const;
   size_type
   find_first_of	(charT c, size_type pos	= 0) const;
      Search for	the first occurrence in	this  string of	any element in
      a specified string.	The find_first_of variations return,
      respectively:

      find_first_of(basic_string(s,n), pos)
      find_first_of(basic_string(s), pos)
      find_first_of(basic_string(1, c), pos)

   size_type
   find_last_not_of(const basic_string& str,
 		  size_type pos	= npos)	const;
      Searches for the last element of this string at or before
      position pos that is not equal to any element of str.  If
      find_last_not_of finds a non-matching element, it	returns	the
      index of the character.  If	all the	elements match, the
      function returns npos.  Equality is defined by	traits::eq().

   size_type
   find_last_not_of(const charT*	s,
 		  size_type pos, size_type n) const;
   size_type
   find_last_not_of(const charT*	s, size_type pos = npos) const;
   size_type
   find_last_not_of(charT c, size_type pos = npos) const;
      Search for	the last element in this string	at or  before position pos
      that is not equal to any element of a given set of	characters.  The
      members return, respectively:

      find_last_not_of(basic_string(s,n), pos)
      find_last_not_of(basic_string(s), pos)
      find_last_not_of(basic_string(1, c), pos)

   size_type
   find_last_of(const basic_string& str,
 	      size_type	pos = npos) const;
      Searches for the last occurrence of any element of str	at or
      before	position pos in	this string.  If found,	find_last_of
      returns the index of the matching character.  If not found
      find_last_of returns npos.  Equality is defined by traits::eq().

   size_type
   find_last_of(const charT* s, size_type pos,
 	      size_type	n) const;
   size_type
   find_last_of(const charT* s, size_type pos = npos) const;
   size_type
   find_last_of(charT c,	size_type pos =	npos) const;
      Search for	the last occurrence in this string of any element in a
      specified string.  The members return, respectively:

      find_last_of(basic_string(s,n), pos)
      find_last_of(basic_string(s), pos)
      find_last_of(basic_string(1, c), pos)

   basic_string&
   insert(size_type pos1, const basic_string& s);
   basic_string&
   insert(size_type pos,	const  basic_string& s,
 	size_type pos2 = 0, size_type n	= npos);
   basic_string&
   insert(size_type pos,	const charT* s,	size_type n);
   basic_string&
   insert(size_type pos,	const charT* s);
   basic_string&
   insert(size_type pos,	size_type n, charT c);
      Insert additional elements	at position pos	in this	string.	 All
      of	the variants of this function will throw an out_of_range
      exception if pos > size().  All variants will	also throw a
      length_error if the resulting string will exceed	max_size().
      Elements of this string will be moved apart as necessary	to
      accommodate the inserted elements.  All return a reference to
      this string after completion.

      The second	variation of this function inserts the lesser of n and
      s.size() -	pos2 characters	of s, beginning	at position pos2 in
      this string.  This version will	throw an out_of_range
      exception	if  pos2  > s.size().	The third version inserts n
      characters of the array pointed to	by s.  The fourth inserts
      elements from	the array pointed to by	s up to, but not
      including, a traits::eos()  character.	 Finally, the fifth
      variation inserts n repetitions of	c.

   iterator
   insert(iterator p, charT c = charT());
   void
   insert(iterator p, size_type n, charT	c);
   template<class InputIterator>
   void
   insert(iterator p, InputIterator first, InputIterator	last);
      Insert additional elements	in this	 string	 immediately before
      the	character referred to by p.  All of these versions
      of insert require that p is	a valid	iterator on this
      string.  The first version inserts a copy of c.	 The second
      version inserts n repetitions of c.	 The third version
      inserts characters	in the range [first, last).  The first version
      returns p.

   size_type
   length() const;
      Return the	number of elements contained in	this string.

   size_type
   max_size() const;
      Returns the maximum possible size of the string.

   size_type
   rfind	(const basic_string& str, size_type pos	 = npos) const;
      Searches for the last occurrence of the substring	specified by
      str in this string, starting at position pos. Note that only the
      first character of the	substring must be <= pos; the
      remaining	characters may extend beyond pos. If found, the index
      of	the first character of that matches substring is returned.  If
      not found, npos	is returned.  Equality is defined by
      traits::eq().

   size_type
   rfind(const charT* s,	size_type pos,	size_type n) const;
   size_type
   rfind(const charT* s,	size_type pos =	npos) const;
   size_type
   rfind(charT c, size_type pos = npos) const;
      Searches for the last sequence of characters in this string
      matching a specified string.	The rfind variations return,
      respectively:

      rfind(basic_string(s,n), pos)
      rfind(basic_string(s), pos)
      rfind(basic_string(1, c), pos)

   basic_string&
   replace(size_type pos, size_type n1, const basic_string& s);
   basic_string&
   replace(size_type pos1, size_type n1,	const basic_string& str,
 	 size_type pos2, size_type n2);
   basic_string&
   replace(size_type pos, size_type n1, const charT* s,
 	 size_type n2);
   basic_string&
   replace(size_type pos, size_type n1, const charT* s);
   basic_string&
   replace(size_type pos, size_type n1, size_type n2, charT c);
      The replace function replaces selected elements of	this string
      with an alternate set of elements.	 All of	these versions insert
      the new elements in place of n1 elements in this string,
      starting at position	pos. They each throw an	out_of_range
      exception if pos1 > size()and a length_error exception if the
      resulting string size exceeds max_size().

      The second	version	replaces elements of the original string with
      n2 characters	from string s starting at position pos2.  It
      will throw	the out_of_range exception if pos2 > s.size().	 The
      third variation of	the function replaces elements	in the
      original	string with n2 elements	from the array pointed to by
      s.	 The fourth version replaces elements in the string with
      elements from the array pointed to by s, up to, but not
      including,	a traits::eos()	character.  The	fifth replaces n
      elements with n2 repetitions of character c.

   basic_string&
   replace(iterator i1, iterator	i2,
 	 const basic_string& str);
   basic_string&
   replace(iterator i1, iterator	i2, const charT* s,
 	 size_type n);
   basic_string&
   replace(iterator i1, iterator	i2, const charT* s);
   basic_string&
   replace(iterator i1, iterator	i2, size_type n,
 	 charT c);
   template<class InputIterator>
   basic_string&
   replace(iterator  i1,	 iterator  i2,
 	 InputIterator j1, InputIterator j2);
      Replace selected elements of this string with an alternative set
      of elements.  All of these versions of replace require
      iterators i1 and i2 to be valid iterators on this string.  The
      elements specified by the range [i1,i2) are replaced by
      the new elements.

      The first version shown here replaces with all members in
      str. The	second version starts at position i1, and replaces the
      next n characters with n	characters of the array	pointed	to by
      s.  The third variation replaces string elements with elements
      from the array pointed to by s up to, but not including, a
      traits::eos() character.	The fourth version replaces string
      elements with n repetitions of c.  The last variation
      shown here replaces string elements with the members
      specified	in the range [j1, j2).

   void
   reserve(size_type res_arg);
      Assures that the storage capacity is at least res_arg.

   void
   resize(size_type n, charT c);
   void
   resize(size_type n);
      Changes the capacity of this string to n.	If the new capacity is
      smaller than the current size of the string, then it is
      truncated.	 If the capacity is larger, then the string is	padded
      with c characters. The latter	resize member pads the string
      with default characters specified by  traits::eos().

   size type
   size() const;
      Return the	number of elements contained in	this string.

   basic_string
   substr(size_type pos = 0, size_type n	= npos)	const;
      Returns a string composed of copies of the	lesser of n and	size()
      characters in this string starting at index pos.  Throws an
      out_of_range exception if pos <= size().

   void
   swap(basic_string& s);
      Swaps the contents	of this	string with the	contents of s.

 NON-MEMBER OPERATORS

   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	lhs, const basic_string& rhs);
      Returns a string of length	lhs.size()  +  rhs.size(), where the
      first lhs.size()	elements are copies of the  elements of	lhs,
      and the next rhs.size()	elements are copies of the elements of
      rhs.

   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(charT lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	 lhs, const charT* rhs);
   template<class charT,	class traits, class Allocator>
   basic_string
   operator+(const basic_string&	lhs, charT rhs);
      Returns a string that represents the concatenation	of two
      string-like entities.	These functions	return,	respectively:

      basic_string(lhs) + rhs
      basic_string(1, lhs) + rhs
      lhs + basic_string(rhs)
      lhs + basic_string(1, rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator==(const basic_string& lhs, const basic_string& rhs);
      Returns a boolean value of	true if	lhs and	rhs are	equal, and
      false if they are not. Equality  is	defined	by the
      compare() member	function.

   template<class charT,	class traits, class Allocator>
   bool
   operator==(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator==(const basic_string& lhs, const charT* rhs);
      Returns a boolean value indicating	whether	lhs and	rhs are	equal.
      Equality is defined by the	compare()  member function.  These
      functions return, respectively:

      basic_string(lhs) == rhs
      lhs == basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const basic_string& lhs,
 	    const basic_string&	rhs);
      Returns a boolean value representing the	inequality of lhs and
      rhs.  Inequality	is defined by the compare() member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator!=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the inequality of  lhs and
      rhs. Inequality	is defined by the compare()  member function.
      The functions return, respectively:

      basic_string(lhs) != rhs
      lhs != basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator<(const basic_string&	lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      less-than	relationship of lhs and rhs.  Less-than is defined
      by the compare() member.

   template<class charT,	class traits, class Allocator>
   bool
   operator<(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator<(const basic_string&	lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      less-than	relationship of lhs and rhs.  Less-than is defined
      by the compare() member function.	These functions	return,
      respectively:

      basic_string(lhs) < rhs
      lhs < basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator>(const basic_string&	lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      greater-than relationship of lhs and rhs.  Greater-than	is
      defined by the compare() member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator>(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator>(const basic_string&	lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      greater-than relationship of lhs and rhs.  Greater-than	is
      defined by the compare() member.  The functions return,
      respectively:

      basic_string(lhs) > rhs
      lhs > basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const basic_string& lhs,
 	      const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      less-than-or-equal relationship of lhs	and rhs.  Less-than-
      or-equal is defined by	the compare() member function.

   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator<=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      less-than-or-equal relationship	of lhs and rhs.
      Less-than-or-equal is defined by the compare() member function.
      These functions return, respectively:

      basic_string(lhs) <= rhs
      lhs <= basic_string(rhs)

   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const basic_string& lhs, const basic_string& rhs);
      Returns a boolean value representing the lexicographical
      greater-than- or-equal relationship of lhs and rhs.
      Greater-than-or-equal is defined by	the compare() member
      function.

   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const charT* lhs, const basic_string& rhs);
   template<class charT,	class traits, class Allocator>
   bool
   operator>=(const basic_string& lhs, const charT* rhs);
      Returns a boolean value representing the lexicographical
      greater-than- or-equal  relationship of lhs and rhs.
      Greater-than-or-equal is defined by	the compare() member.
      The functions return, respectively:

      basic_string(lhs) >= rhs
      lhs >= basic_string(rhs)

   template <class charT, class traits, class Allocator>
   void swap(basic_string<charT,traits,Allocator>& a,
 	   basic_string<charT,traits,Allocator>& b);

      Swaps the	contents of a and b by calling a's swap	function on b.

   template<class charT,	class traits, class Allocator>
   istream&
   operator>>(istream& is, basic_string&	str);
      Reads str	from  is using traits::char_in until a
      traits::is_del()	element  is read.  All elements read,	except
      the delimiter, are placed in str.  After the read, the function
      returns	is.

   template<class charT,	class traits, class Allocator>
   ostream&
   operator<<(ostream& os, const	basic_string& str);
      Writes all	elements of str	to os in order from first to last,
      using traits::char_out().  After	the write, the function
      returns	os.

 NON-MEMBER FUNCTION

   template <class Stream, class	charT, class traits,
 	   class Allocator>
   Stream&
   getline(Stream& is, basic_string& str, charT delim);
      An	unformatted input function that	extracts characters from is
      into str until npos	- 1 characters are read, the end of
      the	input sequence is reached, or the character read is
      delim.  The characters are read using traits::char_in().

 EXAMPLE

   //
   // string.cpp
   //
    #include<string>
    #include <iostream.h>

   int main()
    {
     string test;

      //Type in a string	over five characters long
     while(test.empty() ||  test.size() <= 5)
      {
       cout << "Type a string between 5 and 100 characters long.	"
 	    << endl;
       cin >> test;
      }

      //Test operator[] access
     cout << "Changing the third	character from " << test[2] <<
 	     " to * " << endl;
     test[2] = '*';
     cout << "now its: "	<< test	<< endl	<< endl;

      //Try the insertion member	function
     cout << "Identifying the middle: ";
     test.insert(test.size() / 2, "(the middle is here!)");
     cout << test << endl << endl;

      //Try replacement
     cout << "I didn't like the word 'middle',so	instead,I'll say:"
 		<< endl;
     test.replace(test.find("middle",0),	6, "center");
     cout << test << endl;

     return 0;
    }

   Output :
   Type a string	between	5 and 100 characters long.
   roguewave
   Changing the third character from g to *
   now its: ro*uewave
   Identifying the middle: ro*u(the middle is here!)ewave
   I didn't like	the word 'middle', so instead, I'll say:
   ro*u(the center is here!)ewave

 SEE ALSO

   Allocators, string, wstring

 STANDARDS CONFORMANCE
   ANSI X3J16/ISO WG21 Joint C++	Committee
  Close     Help