Listing 1: Extracting a short

typedef basic_istream<_E, _Tr> _Myt;
typedef basic_ios<_E, _Tr> _Myios;
typedef istreambuf_iterator<_E, _Tr> _Iter;
typedef num_get<_E, _Iter> _Nget;

_Myt& _Myt::operator>>(short& _X)
    {ios_base::iostate _St = ios_base::goodbit;
    const sentry _Ok(*this);
    if (_Ok)
        {long _Y;
        const _Nget& _Fac =
            use_facet<_Nget>(ios_base::getloc());
        try
            {_Fac.get(_Iter(_Myios::rdbuf()), _Iter(0),
                *this, _St, _Y); }
        catch (...)
            _Myios::setstate(ios_base::badbit, true); }
        if (_St & ios_base::failbit
            || _Y < SHRT_MIN || SHRT_MAX < _Y)
            _St |= ios_base::failbit;
        else
            _X = _Y; }
    _Myios::setstate(_St);
    return (*this); }
//End of File