<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2258: a.erase(q1, q2) unable to directly return q2</title>
<meta property="og:title" content="Issue 2258: a.erase(q1, q2) unable to directly return q2">
<meta property="og:description" content="C++ library issue. Status: C++14">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2258.html">
<meta property="og:type" content="website">
<meta property="og:image" content="http://cplusplus.github.io/LWG/images/cpp_logo.png">
<meta property="og:image:alt" content="C++ logo">
<style>
  p {text-align:justify}
  li {text-align:justify}
  pre code.backtick::before { content: "`" }
  pre code.backtick::after { content: "`" }
  blockquote.note
  {
    background-color:#E0E0E0;
    padding-left: 15px;
    padding-right: 15px;
    padding-top: 1px;
    padding-bottom: 1px;
  }
  ins {background-color:#A0FFA0}
  del {background-color:#FFA0A0}
  table.issues-index { border: 1px solid; border-collapse: collapse; }
  table.issues-index th { text-align: center; padding: 4px; border: 1px solid; }
  table.issues-index td { padding: 4px; border: 1px solid; }
  table.issues-index td:nth-child(1) { text-align: right; }
  table.issues-index td:nth-child(2) { text-align: left; }
  table.issues-index td:nth-child(3) { text-align: left; }
  table.issues-index td:nth-child(4) { text-align: left; }
  table.issues-index td:nth-child(5) { text-align: center; }
  table.issues-index td:nth-child(6) { text-align: center; }
  table.issues-index td:nth-child(7) { text-align: left; }
  table.issues-index td:nth-child(5) span.no-pr { color: red; }
  @media (prefers-color-scheme: dark) {
     html {
        color: #ddd;
        background-color: black;
     }
     ins {
        background-color: #225522
     }
     del {
        background-color: #662222
     }
     a {
        color: #6af
     }
     a:visited {
        color: #6af
     }
     blockquote.note
     {
        background-color: rgba(255, 255, 255, .10)
     }
  }
</style>
</head>
<body>
<hr>
<p><em>This page is a snapshot from the LWG issues list, see the <a href="lwg-active.html">Library Active Issues List</a> for more information and the meaning of <a href="lwg-active.html#C++14">C++14</a> status.</em></p>
<h3 id="2258"><a href="lwg-defects.html#2258">2258</a>. <code>a.erase(q1, q2)</code> unable to directly return <code>q2</code></h3>
<p><b>Section:</b> 23.2.7 <a href="https://wg21.link/associative.reqmts">[associative.reqmts]</a> <b>Status:</b> <a href="lwg-active.html#C++14">C++14</a>
 <b>Submitter:</b> Geoff Alexander <b>Opened:</b> 2013-05-11 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>0
</p>
<p><b>View other</b> <a href="lwg-index-open.html#associative.reqmts">active issues</a> in [associative.reqmts].</p>
<p><b>View all other</b> <a href="lwg-index.html#associative.reqmts">issues</a> in [associative.reqmts].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#C++14">C++14</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Section 23.2.7 <a href="https://wg21.link/associative.reqmts">[associative.reqmts]</a>, Table 102, page 743 of the C++ 2011 Standard states that <code>a.erase(q1, q2)</code> 
returns <code>q2</code>. The problem is that <code>a.erase(q1, q2)</code> cannot directly return <code>q2</code> as the return type, 
<code>iterator</code>, differs from that of <code>q2</code>, <code>const_iterator</code>. 
</p>

<p><i>[2013-09 Chicago (evening issues group)]</i></p>

<p>
The wording looks good, but is worded slightly differently to how we say the same for sequence containers, and for unordered
associative containers.  We should apply consistent wording in all three cases.
</p>
<p>
Alisdair to provide the wording.
</p>

<p><i>[2014-02-12 Issaquah meeting]</i></p>

<p>
Move a Immediate.
</p>



<p id="res-2258"><b>Proposed resolution:</b></p>
<ol>
<li><p>In the specification of <code>a.erase(q1, q2)</code> in sub-clause 23.2.7 <a href="https://wg21.link/associative.reqmts">[associative.reqmts]</a>, Table 102 change as indicated:</p>

<blockquote>
<table border="1">
<caption>Table 102 &mdash; Associative container requirements (in addition to container) (continued)</caption>
<tr>
<th>Expression</th>
<th>Return type</th>
<th>Assertion&#47;note pre-&#47;post-condition</th>
<th>Complexity</th>
</tr>

<tr>
<td colspan="4" align="center">
<code>&hellip;</code>
</td>
</tr>

<tr>
<td>
<code>a.erase(q1, q2)</code>
</td>
<td>
<code>iterator</code>
</td>
<td>
erases all the elements in the range <code>[q1,q2)</code>. Returns <del><code>q2</code></del><ins>
an iterator pointing to the element pointed to by <code>q2</code> prior to any elements
being erased. If no such element exists, <code>a.end()</code> is returned</ins>.
</td>
<td>
<code>log(a.size()) + N</code> where <code>N</code> has the value <code>distance(q1, q2)</code>.
</td>
</tr>

<tr>
<td colspan="4" align="center">
<code>&hellip;</code>
</td>
</tr>

</table>
</blockquote>
</li>

</ol>






</body>
</html>
