<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 4005: "Required behavior" too narrowly defined</title>
<meta property="og:title" content="Issue 4005: &quot;Required behavior&quot; too narrowly defined">
<meta property="og:description" content="C++ library issue. Status: New">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue4005.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#New">New</a> status.</em></p>
<h3 id="4005"><a href="lwg-active.html#4005">4005</a>. "Required behavior" too narrowly defined</h3>
<p><b>Section:</b> 3.48 <a href="https://wg21.link/defns.required.behavior">[defns.required.behavior]</a>, 16.3.2.4 <a href="https://wg21.link/structure.specifications">[structure.specifications]</a>, 16.4.5.8 <a href="https://wg21.link/res.on.functions">[res.on.functions]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
 <b>Submitter:</b> Eric Niebler <b>Opened:</b> 2023-11-03 <b>Last modified:</b> 2024-06-24</p>
<p><b>Priority: </b>2
</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
The library's definition of the term "required behavior" (3.48 <a href="https://wg21.link/defns.required.behavior">[defns.required.behavior]</a>) makes it specific to 
certain replaceable functions such as the replaceable global allocation functions. Notably, it is not one of the elements 
that are allowed to appear in the descriptions of general function semantics. That is, it isn't in the list in 
16.3.2.4 <a href="https://wg21.link/structure.specifications">[structure.specifications]</a> p3.
<p/>
However, the specification of the random number generator library uses "Required behavior" as such a descriptive element 
of its functions' semantics (e.g., 29.5.6 <a href="https://wg21.link/rand.predef">[rand.predef]</a>).
<p/>
I think that's a fine use of "Required behavior", so I would like the term to be more generally applicable to the behavior 
of any stdlib function that may be customized by users. This is relevant for <code>std::execution</code>, where algorithms are 
customizable but the customizations are required to behave a certain way. 
<p/>
<b>Daniel:</b>
<p/>
Bullet (2.4) of 16.4.5.8 <a href="https://wg21.link/res.on.functions">[res.on.functions]</a> also contradicts to the more narrow definition of 
3.48 <a href="https://wg21.link/defns.required.behavior">[defns.required.behavior]</a> by suddenly extending it to "destructor operations".
</p>

<p><i>[2024-03-11; Reflector poll]</i></p>

<p>
Set priority to 2 after reflector poll.
</p>

<p><i>[2024-06-24; The approval of <a href="https://wg21.link/P2810R4" title=" is_debugger_present is_replaceable">P2810R4</a> means that
"required behavior" is now being incorrectly used in the working paper.]</i></p>



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





</body>
</html>
