<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2602: [filesys.ts] [PDTS] Tighten specification when there is no reasonable behavior</title>
<meta property="og:title" content="Issue 2602: [filesys.ts] [PDTS] Tighten specification when there is no reasonable behavior">
<meta property="og:description" content="C++ library issue. Status: TS">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2602.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#TS">TS</a> status.</em></p>
<h3 id="2602"><a href="lwg-defects.html#2602">2602</a>. [filesys.ts] [PDTS] Tighten specification when there is no reasonable behavior</h3>
<p><b>Section:</b> 2.1 [filesys.ts::fs.conform.9945] <b>Status:</b> <a href="lwg-active.html#TS">TS</a>
 <b>Submitter:</b> FI-1 <b>Opened:</b> 2014-01-20 <b>Last modified:</b> 2017-07-30</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#filesys.ts::fs.conform.9945">issues</a> in [filesys.ts::fs.conform.9945].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#TS">TS</a> status.</p>
<p><b>Discussion:</b></p>
<p><b>Addresses: filesys.ts</b></p>
<p>It is unfortunate that error reporting for inability to provide reasonable behaviour is
completely implementation-defined. This hurts portability in the sense that programmers have no
idea how errors will be reported and cannot anticipate anything.</p>

<p>Change "If an implementation cannot provide any reasonable behavior, the implementation
shall report an error in an implementation-defined manner." to "If an implementation cannot
provide any reasonable behavior, the code using the facilities for which reasonable behaviour
cannot be provided shall be ill-formed." and strike the note.</p>

  <p><i>[2014-02-07, Beman Dawes suggests wording]</i></p>


  <p><i>[2014-02-12, Daniel Kr&uuml;gler comments:]</i></p>


  <blockquote>
  <p/>In our code bases we routinely have to target different filesystems,
  notably POSIX-based and Windows. While on Windows there is no meaning
  in setting the <code>owner_exec</code> permission, for example, this is required on
  POSIX systems when the corresponding file should be executable. Still,
  attempting to invoke this operation should be possible. It would be
  OK, if we got a defined runtime response to this, such as a
  specifically defined error code value that could be tested either via
  the error_code&amp; overload, but it would be IMO unacceptable for
  end-users to tell them "Well, this code may not compile". I don't
  think that we can teach people that code written using the filesystem
  operations might or might not compile. It would be very valuable to
  have at least a clear indication that implementers are required to
  give a defined runtime-response if they do believe that this operation
  cannot be implemented resulting in "reasonable behaviour".
  </blockquote>

  <p><i>[2014-02-12, Proposed wording updated to reflect LWG/SG-3 discussion in Issaquah.
  <p/>Since the standardese to carry out the LWG/SG-3 "throw or error code" intent is
  best achieved by reference to the Error reporting section, a note was added by the project
  editor. Please review carefully.
  ]</i></p>


  <p><i>[2014-02-13 LWG/SG-3 Issaquah: Proposed wording accepted.]</i></p>



<p id="res-2602"><b>Proposed resolution:</b></p>

<ol>
<li><p>Change 2.1:</p>
<blockquote><p>
If an implementation cannot provide any reasonable behavior,
the implementation shall report an error <del>in an implementation-defined manner</del>
<ins>as specified in &sect; 7 [fs.err.report]. [<i>Note:</i> This allows users
to rely on an exception being thrown or an error code being set when an
implementation cannot provide any reasonable behavior. &mdash; <i>end note</i>]
</ins>.
</p></blockquote>
</li>
</ol>






</body>
</html>
