title: Enumerator type versus compatible type
body: <p>According to the draft C11 Standard <a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1539.pdf" rel="nofollow">N1539</a>, an <code>enum</code> in C has the following semantics (edited for brevity)</p>
  
  <blockquote>
    <p><strong>Semantics</strong> </p>
    
    <p>3 The identifiers in an enumerator list are declared as
    constants that have <strong>type int</strong> and may appear wherever such are
    permitted. [...]</p>
    
    <p>4 Each enumerated type shall be compatible
    with char, a signed integer type, or an unsigned integer type. The
    choice of <strong>type is implementation-defined</strong>, but shall be capable of
    representing the values of all the members of the enumeration. [...]  </p>
    
    <p>C11 §6.7.2.2 3-4</p>
  </blockquote>
  
  <p><strong>Questions</strong>: if all the individual enumerators are constants of type int, why can the compatible type of the <code>enum</code> as a whole be an implementation-defined type? Why don't the enumerators have the same compatible type?</p>