Listing 2: Template class codecvt

        // TEMPLATE CLASS codecvt
template<class _E, class _To, class _St>
    class codecvt : public codecvt_base {
public:
    typedef _E intern_type;
    typedef _To extern_type;
    typedef _St state_type;
    result in(_St& _State,
        const _To *_F1, const _To *_L1, const _To *& _Mid1,
        _E *_F2, _E *_L2, _E *& _Mid2) const
        {return (do_in(_State,
            _F1, _L1, _Mid1, _F2, _L2, _Mid2)); }
    result out(_St& _State,
        const _E *_F1, const _E *_L1, const _E *& _Mid1,
        _To *_F2, _To *_L2, _To *& _Mid2) const
        {return (do_out(_State,
            _F1, _L1, _Mid1, _F2, _L2, _Mid2)); }
    result unshift(_St& _State,
        _To *_F2, _To *_L2, _To *& _Mid2) const
        {return (do_unshift(_State,
            _F2, _L2, _Mid2)); }
    int length(_St& _State, const _E *_F1,
        const _E *_L1, size_t _N2) const throw ()
        {return (do_length(_State, _F1, _L1, _N2)); }
    static locale::id id;
    explicit codecvt(size_t _R = 0)
        : codecvt_base(_R) {_Init(_Locinfo()); }
    codecvt(const _Locinfo& _Lobj, size_t _R = 0)
        : codecvt_base(_R) {_Init(_Lobj); }
    static size_t _CDECL _Getcat()
        {return (_X_CTYPE); }
protected:
    virtual ~codecvt()
        {};
    void _Init(const _Locinfo& _Lobj)
        {_Cvt = _Lobj._Getcvt(); }
    virtual result do_in(_St& _State,
        const _To *_F1, const _To *, const _To *& _Mid1,
        _E *_F2, _E *, _E *& _Mid2) const
        {_Mid1 = _F1, _Mid2 = _F2;
        return (noconv); }
    virtual result do_out(_St& _State,
        const _E *_F1, const _E *, const _E *& _Mid1,
        _To *_F2, _To *, _To *& _Mid2) const
        {_Mid1 = _F1, _Mid2 = _F2;
        return (noconv); }
    virtual result do_unshift(_St& _State,
        _To *_F2, _To *_L2, _To *& _Mid2) const
        {return (noconv); }
    virtual int do_length(_St& _State, const _E *_F1,
        const _E *_L1, size_t _N2) const throw ()
        {return (_N2 < _L1 - _F1 ? _N2 : _L1 - _F1); }
private:
    _Locinfo::_Cvtvec _Cvt;
    };
template<class _E, class _To, class _St>
    locale::id codecvt<_E, _To, _St>::id;
//End of File