chiaki ISHIKAWA writes:

> (2014/04/07 10:16), Karl Tomlinson wrote:
>> because enumeration types may hold values that don't match any of
>> their enumerator values.
>
> Is this allowed by C (or C++) specification today?

It is allowed in N3242.  I think the relevant sections are

5.2.9 Static cast

10 A value of integral or enumeration type can be explicitly converted to an
   enumeration type. The value is unchanged if the original value is within
   the range of the enumeration values (7.2). Otherwise, the resulting
   enumeration value is unspecified.

7.2 Enumeration declarations

7 For an enumeration whose underlying type is fixed, the values of the
  enumeration are the values of the underlying type. Otherwise, for an
  enumeration where e min is the smallest enumerator and e max is the largest,
  the values of the enumeration are the values in the range b min to b max ,
  defined as follows: Let K be 1 for a two’s complement representation and 0
  for a one’s complement or sign-magnitude representation.  b max is the
  smallest value greater than or equal to max(|e min | − K, |e max |) and
  equal to 2 M − 1, where M is a non-negative integer. b min is zero if e min
  is non-negative and −(b max + K) otherwise. The size of the smallest
  bit-field large enough to hold all the values of the enumeration type is
  max(M, 1) if b min is zero and M + 1 otherwise. It is possible to define an
  enumeration that has values not defined by any of its enumerators. If the
  enumerator-list is empty, the values of the enumeration are as if the
  enumeration had a single enumerator with value 0.
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to