Boost logo

Boost Users :

Subject: Re: [Boost-users] [proto] char vs. int behaviour when matching
From: Maurizio Vitale (maurizio.vitale_at_[hidden])
Date: 2009-09-02 18:01:33


>>>>> "Dominique" == Dominique Devienne <ddevienne_at_[hidden]> writes:

    Dominique> On Wed, Sep 2, 2009 at 3:51 PM, Eric Niebler<eric_at_[hidden]> wrote:
>> That's where you're mistaken. char, signed char and unsigned char
>> are 3 distinct types.

    Dominique> Hi Eric. After learning about int "abcd" literals from
    Dominique> your mpl::string post, I'm now learning about an integral
    Dominique> type which is neither signed nor unsigned!

    Dominique> (sounds like my assumption that char is an integral type
    Dominique> might be wrong in fact...)

    Dominique> Would you mind expanding a little on this, possibly with
    Dominique> pointers to further info please?

They are defined as different types in the standard. What may be more
surprising is that given:

void foo (int);
void foo (signed char);
void foo (unsigned char);
char a;
foo (a) -> invokes foo (int).

This is because being different types they are not particularly related
and each is promoted to int (unless a perfect match is found, of
course).

Here's a fragment I've grabbed from the web, don't know if it is for C
or C++:

3.9.1 Fundamental types [basic.fundamental]

1 Objects declared as characters char) shall be large enough to store
any member of the implementation's basic character set. If a character
from this set is stored in a character object, the integral value of
that character object is equal to the value of the single character
literal form of that character. It is implementation-defined whether a
char object can hold negative values. Characters can be explicitly
declared unsigned or signed. Plain char, signed char, and unsigned char
are three distinct types. A char, a signed char, and an unsigned char
occupy the same amount of storage and have the same alignment
requirements (basic.types); that is, they have the same object
representation. For character types, all bits of the object
representation participate in the value representation. For unsigned
character types, all possible bit patterns of the value representation
represent numbers. These requirements do not hold for other types. In
any particular implementation, a plain char object can take on either
the same values as a signed char or an unsigned char; which one is
implementation-defined.

-- 

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net