Listing 1: Simple Unicode converter

using namespace std;
typedef codecvt<wchar_t, char, mbstate_t> Mybase;

        // CLASS Simple_codecvt
class Simple_codecvt : public Mybase {
public:
    typedef wchar_t _E;
    typedef char _To;
    typedef mbstate_t _St;

    explicit Simple_codecvt(size_t _R = 0)
        : Mybase(_R) {}

protected:
    virtual result do_in(_St& _State,
        const _To *_F1, const _To *_L1, const _To *& _Mid1,
        _E *_F2, _E *_L2, _E *& _Mid2) const
        {return (noconv); }

    virtual result do_out(_St& _State,
        const _E *_F1, const _E *_L1, const _E *& _Mid1,
        _To *_F2, _To *_L2, _To *& _Mid2) const
        {return (noconv); }

    virtual result do_unshift(_St& _State,
        _To *_F2, _To *_L2, _To *& _Mid2) const
        {return (noconv); }

    virtual int do_length(_St& _State, const _To *_F1,
        const _To *_L1, size_t _N2) const _THROW0()
        {return (_N2 < (size_t)(_L1 - _F1)
            ? _N2 : _L1 - _F1); }

    virtual bool do_always_noconv() const _THROW0()
        {return (true); }

    virtual int do_max_length() const _THROW0()
        {return (2); }

    virtual int do_encoding() const _THROW0()
        {return (2); }
    };