<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 971: Spurious diagnostic conversion function</title>
<meta property="og:title" content="Issue 971: Spurious diagnostic conversion function">
<meta property="og:description" content="C++ library issue. Status: NAD">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue971.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#NAD">NAD</a> status.</em></p>
<h3 id="971"><a href="lwg-closed.html#971">971</a>. Spurious diagnostic conversion function</h3>
<p><b>Section:</b> 19.5.4.5 <a href="https://wg21.link/syserr.errcode.nonmembers">[syserr.errcode.nonmembers]</a> <b>Status:</b> <a href="lwg-active.html#NAD">NAD</a>
 <b>Submitter:</b> Beman Dawes <b>Opened:</b> 2009-01-19 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD">NAD</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Anthony Williams raised the question in c++std-lib-22987 "why is there
<code>std::make_error_code(std::errc)</code>? What purpose does this serve?"
</p>
<p>
The function <code>make_error_code(errc e)</code> is not required, since
<code>make_error_condition(errc e)</code> is the function that is needed for <code>errc</code>
conversions. <code>make_error_code(errc e)</code> appears to be a holdover from my
initial confusion over the distinction between POSIX and operating
systems that conform to the POSIX spec.
</p>

<p><i>[
Post Summit:
]</i></p>


<blockquote><p>
Recommend Review.
</p></blockquote>

<p><i>[
Batavia (2009-05):
]</i></p>

<blockquote><p>
The designer of the facility (Christopher Kohlhoff)
strongly disagrees that there is an issue here,
and especially disagrees with the proposed resolution.
Bill would prefer to be conservative and not apply this proposed resolution.
Move to Open, and recommend strong consideration for NAD status.
</p></blockquote>

<p><i>[
2009-05-21 Beman adds:
]</i></p>


<blockquote><p>
My mistake. Christopher and Bill are correct and the issue should be
NAD. The function is needed by users.
</p></blockquote>

<p><i>[
2009-07-21 Christopher Kohlhoff adds rationale for <code>make_error_code</code>:
]</i></p>


<blockquote>
<p>
Users (and indeed library implementers) may need to use the
<code>errc</code> codes in portable code. For example:
</p>

<blockquote><pre>
void do_foo(error_code&amp; ec)
{
#if defined(_WIN32)
  // Windows implementation ...
#elif defined(linux)
  // Linux implementation ...
#else
  // do_foo not supported on this platform
  ec = make_error_code(errc::not_supported);
#endif
}
</pre></blockquote>
</blockquote>

<p><i>[
2009 Santa Cruz:
]</i></p>


<blockquote><p>
Moved to NAD.
</p></blockquote>



<p id="res-971"><b>Proposed resolution:</b></p>
<p>
Change System error support 19.5 <a href="https://wg21.link/syserr">[syserr]</a>, Header <code>&lt;system_error&gt;</code>
synopsis, as indicated:
</p>

<blockquote><pre>
<del>error_code make_error_code(errc e);</del>
error_condition make_error_condition(errc e);
</pre></blockquote>

<p>
Delete from Class error_code non-member functions
19.5.4.5 <a href="https://wg21.link/syserr.errcode.nonmembers">[syserr.errcode.nonmembers]</a>:
</p>

<blockquote><pre>
<del>error_code make_error_code(errc e);</del>
</pre>
<blockquote><p>
<del><i>Returns:</i> <code>error_code(static_cast&lt;int&gt;(e),
generic_category)</code>.</del>
</p></blockquote>
</blockquote>






</body>
</html>
