TL;博士
和都是正确的。
枚举的值受基础类型的限制,而不是枚举数的限制!
C++14,7.2枚举声明,第8段:
可以定义一个枚举,它的值没有被任何一个枚举器定义。
这意味着可以:
代码语言:javascript复制state x = static_cast< state >(5);这就是GCC警告你的:enum state的值可能不符合2位。
但是,只要您不试图对X::st进行实际操作,一切都会闪闪发亮。
这可能是克郎没有警告你的原因。
由于标准中的任何一种方法都不要求诊断,所以警告或不警告您没有错。