G++ enums 'underlying type'

Paul Schlie schlie@comcast.net
Sat Dec 25 21:06:00 GMT 2004


> 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).




More information about the Gcc mailing list