This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: G++ enums 'underlying type'
- From: Gabriel Dos Reis <gdr at integrable-solutions dot net>
- To: Paul Schlie <schlie at comcast dot net>
- Cc: <gcc at gcc dot gnu dot org>
- Date: 29 Dec 2004 19:12:03 +0100
- Subject: Re: G++ enums 'underlying type'
- Organization: Integrable Solutions
- References: <BDF33EB6.8609%schlie@comcast.net>
Paul Schlie <schlie@comcast.net> writes:
| > From: Paolo Carlini <pcarlini at suse dot de>
| > assuming something specific about g++ 'underlying type' (7.2/5) will alow me
| > to remarkably simplifiy the implementation of tr1/type_traits/is_enum: is it
| > signed or not? Basing on some simple experiments on x86, seems always wide
| > either like an int or a long: is this correct in general?
|
| To my understanding, C enums need only be represented as the smallest rank
| signed or unsigned integer type capable of representing it's value range
| (although GCC tends to first unnecessarily promote enums to int, which I
| believe is officially the largest enum equivalent type, and then back them
| down opportunistically; keeping their converted form as small as possible is
| significant to small machine targets, so they should not be unnecessarily
| represented as being any larger than necessary, just as bool/char/short
| types should not be needlessly promoted).
In C, enumerator are ints -- even though the associated enumeration
type is considered a distinct types. Only C++ allows for the smallest
integer type as the underlying type; and C++ enumerators are not ints.
--
Gabriel Dos Reis
gdr@integrable-solutions.net