转换为积分类型后C ++枚举类型的符号不正确

我的理解是根据Integral Promotion将C ++枚举转换为整数类型。 在Integral Promotion期间,我们应该首先尝试将值转换为int ,如果值不能用int表示,则应使用unsigned int

C ++ 03 conv.prom:

2)….枚举类型(7.2)的右值可以转换为以下第一种类型的右值,它可以表示枚举的所有值(即bmin到bmax范围内的值,如7.2:int,unsigned int,long或unsigned long。

但是我在VC ++ 2010中的测试显示出相反的结果:

 enum {A1=60, A2=61,A3=63,A4=64,A5=66,A6=0xffffFFF1}; const bool b1 = A6 < A1; //result b1=true; 

A60xffffFFF1 ,应该是无符号值(十进制4294967281)。 并且,由于此值不能由int表示,因此应将其转换为unsigned int 。 但很明显,当用于比较时, A6被转换为-15。 为什么会这样?

这是MS VC ++的一个错误。 我在这里描述了它

尽管描述是用俄语写的,但您可以使用Google服务翻译将其翻译成英语。

此外,相对于C ++标准本身的枚举存在缺陷。 我在这里也有描述

还可以在此处访问有关枚举讨论(此时为英语)的另一个参考