为什么 C++ 对具有负值的枚举发出警告?

Gif*_*guy 5 c++ enums warnings compiler-warnings visual-c++

我当前的代码类似于:

enum Enum1 : signed __int8
{
    Value1 = 1 ,
    Value2 = 2 ,
    Value3 = -3  // C4341
} ;
Run Code Online (Sandbox Code Playgroud)

错误详细信息状态:
“警告 C4341:'Value3':有符号值超出枚举常量范围”

MSDN指出,仅当您使用 int 范围之外的值时才会出现此警告:
(> 2^31) OR (< 1 - 2^31)

为什么它告诉我我的负值无效?这只是一个警告,但谷歌告诉我,这个警告表明这些枚举值将是未定义的 - 这将破坏我的程序。

Ste*_*e M 3

对我来说似乎是一个错误。当前的 0x 草案并不表明应该是这种情况,MSDN 文档也没有表明应该是这种情况。