$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Dill, John (john-dill_at_[hidden])
Date: 2004-04-21 10:03:07
"Rob Stewart" <stewart_at_[hidden]> wrote in message news:<200404211327.i3LDRov09314_at_[hidden]>...
> From: "Dill, John" <john-dill_at_[hidden]>
> > "Rob Stewart" <stewart_at_[hidden]> wrote in message news:<200404202049.i3KKnwe25029_at_[hidden]>...
> > > From: "Dill, John" <john-dill_at_[hidden]>
> > > > "Rob Stewart" <stewart_at_[hidden]> wrote in message news:<200404201905.i3KJ55e08992_at_[hidden]>...
> > > > > From: "Dill, John" <john-dill_at_[hidden]>
> > > > > >
> > > > > > I am wondering about the use-case of numeric_cast in this sample.
> > > > > >
> > > > > > unsigned char uchar_max = std::numeric_limits<unsigned char>::max();
> > > > > > char schar_value = 0;
> > > > > >
> > > > > > try {
> > > > > > schar_value = boost::numeric_cast<char>( uchar_max );
> > > > > > }
> > > > > > catch ( boost::bad_numeric_cast )
> > > > > > { std::cout << "Overflow occurred..." << std::endl; }
> > > > > >
> > > > > > When I execute this sample, I don't get the exception. What's
> > > > > > the background on this behavior? I'm using gcc 3.3.1.
> > > > >
> > > > > Your char is unsigned.
> > > >
> > > > I'd like to know why conceptually the exception isn't thrown.
> > >
> > > As I said, in too few words, is that your "char" is unsigned, so
> > > "char" and "unsigned char" are essentially the same type.
> > > Technically, they are distinct types (for overloading purposes,
> > > for example), but they are both unsigned and the same size, so:
> > >
> > > assert(std::numeric_limits<char>::max()
> > > == std::numeric_limits<unsigned char>::max());
> > >
> > > on your system.
> >
> > Actually that is not the case. The max defined for unsigned
> > char is 255, while for char is 127. Actually, char is
> > supposedly equivalent to signed char, not to unsigned char.
>
> Based upon the evidence you presented, I concluded that your char
> is equivalent to unsigned char. On what basis do you conclude
> that your char is equivalent to signed char? Did you check
> std::numeric_limits<char>::is_signed?
Yes. Both char and signed char have identical is_signed and max, min. Unsigned char min, max and is_signed is different. Does the standard say that char can be either signed char or unsigned char, or is that just an implementation issue?
Best,
John