<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2723: Do directory_iterator and recursive_directory_iterator become the end iterator upon error?</title>
<meta property="og:title" content="Issue 2723: Do directory_iterator and recursive_directory_iterator become the end iterator upon error?">
<meta property="og:description" content="C++ library issue. Status: C++17">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2723.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++17">C++17</a> status.</em></p>
<h3 id="2723"><a href="lwg-defects.html#2723">2723</a>. Do <code>directory_iterator</code> and <code>recursive_directory_iterator</code> become the end iterator upon error?</h3>
<p><b>Section:</b> 31.12.11 <a href="https://wg21.link/fs.class.directory.iterator">[fs.class.directory.iterator]</a>, 31.12.12 <a href="https://wg21.link/fs.class.rec.dir.itr">[fs.class.rec.dir.itr]</a> <b>Status:</b> <a href="lwg-active.html#C++17">C++17</a>
 <b>Submitter:</b> Eric Fiselier <b>Opened:</b> 2016-05-28 <b>Last modified:</b> 2021-06-06</p>
<p><b>Priority: </b>0
</p>
<p><b>View all other</b> <a href="lwg-index.html#fs.class.directory.iterator">issues</a> in [fs.class.directory.iterator].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#C++17">C++17</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Constructing or performing an increment on directory iterator types can result in an error. Currently there is
implementation divergence regarding the value of the iterator after an error occurs. Both boost and libc++ construct
the end iterator. libstdc++ constructs a singular iterator which is not equal to the end iterator. For this reason
we should clarify the state of the iterators after an error occurs.
</p>

<p><i>[2016-06 Oulu]</i></p>

<p>Moved to P0/Ready during issues prioritization.</p>
<p>Friday: status to Immediate</p>


<p id="res-2723"><b>Proposed resolution:</b></p>
<p>This wording is relative to N4582.</p>
<ol>
<li><p>Modify  [fs.class.directory_iterator] as follows:</p>

<blockquote>
<p>
-3- If an iterator of type <code>directory_iterator</code> <ins>reports an error or</ins> is advanced past the last
directory element, that iterator shall
become equal to the end iterator value. The <code>directory_iterator</code> default constructor shall create an iterator
equal to the end iterator value, and this shall be the only valid iterator for the end condition.
</p>
</blockquote>
</li>
</ol>





</body>
</html>
