Listing 1 The File iomanip

// iomanip standard header
#ifndef_IOMANIP_
#define_IOMANIP_
#include <istream>
#include <ostream>
              // template class smanip
template<class_T> class smanip {
public:
       smanip(ios& (*_F)(ios&,_T),_T_A)
              :_Pf(_F),_Manarg(_A) {}
       ios& (*_Pf)(ios&,_T);
       _T_Manarg;
       };
template<class _T> inline
       istream& operator>>(istream& _I, const smanip<_T>& _M)
       {       // apply manipulator to input stream
       _TRY_BEGIN
              (*_M._Pf) (_I, _M._Manarg);
       _CATCH_ALL
              _I.setstate(ios::failbit);
       _CATCH_END
       return (_I);
       }
template<class _T> inline
       ostream& operator<<(ostream& _0, const smanip<_T>& _M)
       {       // apply manipulator to output stream
       _TRY_BEGIN
              (*_M._Pf)(_O, _M._Manarg);
       _CATCH_ALL
              _0.setstate(ios::failbit);
       _CATCH_END
       return (_0);
       }
              // template class imanip
template<class _T> class imanip {
public:
       imanip(istream& (*_F)(istream&, _T), _T_A)
              : _Pf(F), _Manarg(_A) {}
       istream& (*_Pf)(istream&, _T);
       _T_Manarg;
       };
template<class _T> inline
       istream& operator>>(istream& _I, const imanip<_T>& _M)
       {       // apply input manipulator to input stream
       _TRY_BEGIN
              (*_M._Pf)(_I,_M._Manarg);
       _CATCH_ALL
              _I.setstate(ios::failbit);
       _CATCH_END
       return (_I);
       }
              // template class omanip
template<class _T> class omanip {
public:
       omanip(ostream& (*_F)(ostream&, _T),_T _A)
              : _Pf(_F), _Manarg(_A) {}
       ostream& (*_Pf)(ostream&, _T);
       _T _Manarg;

       };
template<class _T> inline
       ostream& operator<<(ostream& _0, const omanip<_T>& _M)
       {       // apply manipulator to output stream
       _TRY_BEGIN
              (*_M._Pf)(_0, _M._Manarg);
       _CATCH_ALL
              _0.setstate(ios::failbit);
       _CATCH_END
       return (0);
       }
              // instantiations
smanip<ios::fmtflags> resetiosflags(ios::fmtflags);
smanip<ios::fmtflags> setiosflags(ios::fmtflags);
smanip<int> setbase(int);
smanip<int> setfill(int);
smanip<int> setprecision(int);
smanip<int> setw(int);
#endif