<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<TITLE>
    CWG Issue 862</TITLE>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<STYLE TYPE="text/css">
  INS { text-decoration:none; font-weight:bold; background-color:#A0FFA0 }
  .INS { text-decoration:none; background-color:#D0FFD0 }
  DEL { text-decoration:line-through; background-color:#FFA0A0 }
  .DEL { text-decoration:line-through; background-color: #FFD0D0 }
  @media (prefers-color-scheme: dark) {
    HTML { background-color:#202020; color:#f0f0f0; }
    A { color:#5bc0ff; }
    A:visited { color:#c6a8ff; }
    A:hover, a:focus { color:#afd7ff; }
    INS { background-color:#033a16; color:#aff5b4; }
    .INS { background-color: #033a16; }
    DEL { background-color:#67060c; color:#ffdcd7; }
    .DEL { background-color:#67060c; }
  }
  SPAN.cmnt { font-family:Times; font-style:italic }
</STYLE>
</HEAD>
<BODY>
<P><EM>This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21
  Core Issues List revision 118b.
  See http://www.open-std.org/jtc1/sc22/wg21/ for the official
  list.</EM></P>
<P>2025-09-28</P>
<HR>
<A NAME="862"></A><H4>862.
  
Undefined behavior with enumerator value overflow
</H4>
<B>Section: </B>9.8.1&#160; [<A href="https://wg21.link/dcl.enum">dcl.enum</A>]
 &#160;&#160;&#160;

 <B>Status: </B>CD2
 &#160;&#160;&#160;

 <B>Submitter: </B>Daniel Kr&#252;gler
 &#160;&#160;&#160;

 <B>Date: </B>7 April, 2009<BR>


<P>[Voted into WP at October, 2009 meeting.]</P>



<P>The type of an enumerator that has no initializing value in an
enumeration whose underlying type is not fixed is given by the third
bullet of 9.8.1 [<A href="https://wg21.link/dcl.enum#5">dcl.enum</A>] paragraph 5:</P>

<BLOCKQUOTE>

the type of the initializing value is the same as the type of the
initializing value of the preceding enumerator unless the incremented
value is not representable in that type, in which case the type is an
unspecified integral type sufficient to contain the incremented value.

</BLOCKQUOTE>

<P>This does not address the case in which there is no such type,
meaning that it is apparently undefined behavior.  Other cases in
which an enumeration value is unrepresentable are made ill-formed (see
the preceding paragraph for an enumeration with a fixed underlying
type and the following paragraph for the case in which the minimum and
maximum values cannot be represented by a single type).  It would be
better if this case were ill-formed as well, instead of causing
undefined behavior.</P>

<P><B>Proposed resolution (July, 2009):</B></P>

<P>Change 9.8.1 [<A href="https://wg21.link/dcl.enum#5">dcl.enum</A>] paragraph 5, bullet 3 as follows:</P>

<UL><LI>Otherwise the type of the initializing value is the same as
the type of the initializing value of the preceding enumerator unless
the incremented value is not representable in that type, in which case
the type is an unspecified integral type suficient to contain the
incremented value. <INS>If no such type exists, the program is
ill-formed.</INS>
</LI></UL>

<BR><BR>
</BODY>
</HTML>
