<html><head><title>Constexpr Library Additions: containers</title><style type="text/css">ol{margin:0;padding:0}p{margin:0}.c1{font-size:9pt;background-color:#b6d7a8;font-weight:bold}.c13{width:468pt;background-color:#ffffff;padding:72pt 72pt 72pt 72pt}.c3{color:#000099;text-decoration:underline}.c5{font-style:italic;font-weight:bold}.c0{height:11pt;direction:ltr}.c12{background-color:#ea9999;text-decoration:line-through}.c6{font-size:18pt;font-weight:bold}.c10{color:inherit;text-decoration:inherit}.c4{direction:ltr}.c8{font-size:24pt}.c9{background-color:#b6d7a8}.c2{font-size:9pt}.c11{font-size:14pt}.c7{font-weight:bold}body{color:#000000;font-size:11pt;font-family:Arial}h1{padding-top:24pt;color:#000000;font-size:24pt;font-family:Arial;font-weight:bold;padding-bottom:6pt}h2{padding-top:18pt;color:#000000;font-size:18pt;font-family:Arial;font-weight:bold;padding-bottom:4pt}h3{padding-top:14pt;color:#000000;font-size:14pt;font-family:Arial;font-weight:bold;padding-bottom:4pt}h4{padding-top:12pt;color:#000000;font-size:12pt;font-family:Arial;font-weight:bold;padding-bottom:2pt}h5{padding-top:11pt;color:#000000;font-size:11pt;font-family:Arial;font-weight:bold;padding-bottom:2pt}h6{padding-top:10pt;color:#000000;font-size:10pt;font-family:Arial;font-weight:bold;padding-bottom:2pt}</style></head><body class="c13"><p class="c4"><span class="c6">Constexpr Library Additions: </span><span class="c6">containers</span></p><p class="c0"><span class="c7 c8"></span></p><p class="c4"><span>ISO/IEC JTC1 SC22 WG21 </span><span>N3304</span><span>&nbsp;= 1</span><span>1-0074</span><span>&nbsp;- 201</span><span>1-08-17</span></p><p class="c4"><span>Benjamin Kosnik, </span><span class="c3"><a class="c10" href="mailto:bkoz@redhat.com">bkoz@redhat.com</a></span></p><p class="c4"><span>Daniel Krugler, daniel.kruegler@googlemail.com</span></p><p class="c0"><span></span></p><p class="c4"><span class="c11 c7">Introduction</span></p><p class="c0"><span class="c6"></span></p><p class="c4"><span>This paper details use of the ISO C++0x constexpr feature, as initially introduced in &ldquo;Generalized Constant Expressions &mdash; Revision 5&rdquo; (N2235) and incorporating all other subsequent changes as per ISO C++ draft N3</span><span>291</span><span>. Several CWG issues have also influenced the language with respect to constexpr: see issues 1099, 1125, 1194, 1195, 1197, 1198, 1199 and c++-std-core postings number 17890 and 17912. Additional implementation experience</span><span>, and subsequent changes to the core language </span><span>ha</span><span>ve</span><span>&nbsp;motivated the following changes and additions to the library specification. </span></p><p class="c0"><span></span></p><h3 class="c4"><span class="c11 c7">Proposed Changes</span></h3><p class="c0"><span></span></p><p class="c4"><span>A list of additional places in 2</span><span>3.3.2</span><span>&nbsp;</span><span>Class template array</span><span>&nbsp;that can exploit the constexpr language feature is below. For the changes listed, the new text is put in place</span><span class="c5">&nbsp;</span><span class="c7 c9">in bold and green</span><span>&nbsp;with the older text it is replacing </span><span class="c12">struckthrough in red</span><span>.</span></p><p class="c0"><span></span></p><p class="c0"><span></span></p><p class="c4"><span class="c7 c11">Proposed wording</span></p><p class="c0"><span></span></p><p class="c4"><span class="c7">a) Modify 2</span><span class="c7">3.3</span><span class="c7">.2.1 [</span><span class="c7">array</span><span class="c7">.</span><span class="c7">overview</span><span class="c7">]</span><span class="c7">&nbsp;</span><span class="c7">&nbsp;as follows:</span></p><p class="c0"><span class="c7"></span></p><p class="c4"><span class="c2">reference</span></p><p class="c4"><span class="c2">operator[](size_type n);</span></p><p class="c0"><span class="c2"></span></p><p class="c4"><span class="c1">constexpr</span><span class="c2">&nbsp;const_reference </span></p><p class="c4"><span class="c2">operator[](size_type n) const;</span></p><p class="c0"><span class="c2"></span></p><p class="c4"><span class="c2">reference</span></p><p class="c4"><span class="c2">at(size_type n);</span></p><p class="c0"><span class="c2"></span></p><p class="c4"><span class="c1">constexpr</span><span class="c2">&nbsp;const_reference </span></p><p class="c4"><span class="c2">at(size_type n) const;</span></p><p class="c0"><span class="c2"></span></p><p class="c4"><span>Peter asks: look at get, front/back, and data members too.</span></p><p class="c0"><span></span></p><p class="c4"><span class="c11 c7">Acknowledgments</span></p><p class="c0"><span></span></p><p class="c4"><span>Many thanks to Jason Merrill, Paolo Carlini, and Jonathan Wakely for reviewing this document and providing assistance.</span></p></body></html>