[proto] char vs. int behaviour when matching

Proto behaves in a different way when matching terminal<char> and terminal<int>. The only difference I'm aware is that it is implementation defined whether 'char' means 'signed char' or 'unsigned char' but it has to mean one of the two. I was surprised to hit the following: struct char_grammar : proto::or_< proto::terminal<signed char>, proto::terminal<unsigned char>
{}; struct extended_char_grammar : proto::or_< proto::terminal<char>, proto::terminal<signed char>, proto::terminal<unsigned char>
{}; struct int_grammar : proto::or_< proto::terminal<signed int>, proto::terminal<unsigned int>
{};
int main()
{
// WHY _NOT?
BOOST_MPL_ASSERT_NOT ((proto::matches

Maurizio Vitale wrote:
Proto behaves in a different way when matching terminal<char> and terminal<int>. The only difference I'm aware is that it is implementation defined whether 'char' means 'signed char' or 'unsigned char' but it has to mean one of the two. <snip>
That's where you're mistaken. char, signed char and unsigned char are 3
distinct types.
#include

On Wed, Sep 2, 2009 at 3:51 PM, Eric Niebler
That's where you're mistaken. char, signed char and unsigned char are 3 distinct types.
Hi Eric. After learning about int "abcd" literals from your mpl::string post, I'm now learning about an integral type which is neither signed nor unsigned! (sounds like my assumption that char is an integral type might be wrong in fact...) Would you mind expanding a little on this, possibly with pointers to further info please? My naive take on char was it was either equivalent to signed char or unsigned char in a platform-specific manner, but if it's boost::is_same to neither, I'm confused... Thanks, --DD

AMDG Dominique Devienne wrote:
On Wed, Sep 2, 2009 at 3:51 PM, Eric Niebler
wrote: That's where you're mistaken. char, signed char and unsigned char are 3 distinct types.
Hi Eric. After learning about int "abcd" literals from your mpl::string post, I'm now learning about an integral type which is neither signed nor unsigned!
(sounds like my assumption that char is an integral type might be wrong in fact...)
Would you mind expanding a little on this, possibly with pointers to further info please?
My naive take on char was it was either equivalent to signed char or unsigned char in a platform-specific manner, but if it's boost::is_same to neither, I'm confused...
char is always equivalent to either signed char or unsigned char, but it is not the same type. It is always a distinct type. In Christ, Steven Watanabe

"Dominique" == Dominique Devienne
writes:
Dominique> On Wed, Sep 2, 2009 at 3:51 PM, Eric Niebler

On 9/3/09, Eric Niebler
Maurizio Vitale wrote:
Proto behaves in a different way when matching terminal<char> and terminal<int>. The only difference I'm aware is that it is implementation defined whether 'char' means 'signed char' or 'unsigned char' but it has to mean one of the two.
That's where you're mistaken. char, signed char and unsigned char are 3 distinct types.
Yes. In "The C++ Programming Language, 3rd Ed.", Bjarne Stroustrup says that sign of a "char" type is implementation defined. A "char" type must behave identically to "signed char" or "unsigned char" but the three char types are distinct, pointers to these distinct char types can't be mixed, assigning too large a value to "signed char" is undefined and advises to prefer plain "char" over signed char and unsigned char to alleviate portability issues. (4.3, page 72 & 4.10 page 85). Best regards, -Asif
participants (5)
-
Asif Lodhi
-
Dominique Devienne
-
Eric Niebler
-
Maurizio Vitale
-
Steven Watanabe