http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51242



--- Comment #17 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-11-26 
12:43:37 UTC ---

(In reply to comment #15)

> we *error* out anyway, isn't that we are only emitting a warning and only when

> we are assigning the SHRT_MAX + 1.



But isn't the error because there's no implicit conversion from a scoped

enunmeration type to short?  That's just invalid.



And my point is that the narrowing warning is correct, because 'a' is not a

constant expression and its value could be out of the range

[SHRT_MIN,SHRT_MAX].



(In reply to comment #16)

> And to further clarify wrt your specific Comment 11, Jon, for:

> 

> #include <limits.h>

> 

> enum Code {

>   SUCCESS = 0

> };

> 

> Code a = static_cast<Code>(SHRT_MAX + 1);

> 

> short r[] = {a};

> 

> we currently don't warn.



Because the values of that unscoped enum type are [0,1] which always fit in

short.  With a scoped enumeration type the underlying type is fixed so the

values of the enumeration type are the values of the underlying type which are

[INT_MIN,INT_MAX].  But this seems unrelated to using scoped enums as bitfields

anyway.

Reply via email to