This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Incorrect char extraction code


On Tue, Jan 30, 2001 at 09:22:48AM +0000, Jason Merrill wrote:
> >>>>> "Rosen," == Rosen, Hyman <Hyman.Rosen@kbcfp.com> writes:
> 
> > std_istream.h has the following pair of templates:
> >   template<class _Traits>
> >     basic_istream<char, _Traits>&
> operator> (basic_istream<char, _Traits>& __in, unsigned char& __c)
> >     { return (__in >> static_cast<char>(__c)); }
> 
> >   template<class _Traits>
> >     basic_istream<char, _Traits>&
> operator> (basic_istream<char, _Traits>& __in, signed char& __c)
> >     { return (__in >> static_cast<char>(__c)); }
> 
> > These are clearly wrong; the result of a static_cast<char> is not an
> > lvalue, so code that tries an extraction into a signed or unsigned char
> > shouldn't even compile. Those casts need to be reinterpret_cast<char &>,
> 
> Yes.

Before I make that change... why *does* the code compile?  I can successfully
perform extractions into a signed or unsigned char presently.  (Which is
wrong, as you say; I just want to know why we're allowing it.)


Phil

-- 
pedwards at disaster dot jaj dot com  |  pme at sources dot redhat dot com
devphil at several other less interesting addresses in various dot domains
The gods do not protect fools.  Fools are protected by more capable fools.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]