<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2292: Find a better phrasing for "shall not participate in overload resolution"</title>
<meta property="og:title" content="Issue 2292: Find a better phrasing for &quot;shall not participate in overload resolution&quot;">
<meta property="og:description" content="C++ library issue. Status: Resolved">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2292.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#Resolved">Resolved</a> status.</em></p>
<h3 id="2292"><a href="lwg-defects.html#2292">2292</a>. Find a better phrasing for "shall not participate in overload resolution"</h3>
<p><b>Section:</b> 16.3.2.4 <a href="https://wg21.link/structure.specifications">[structure.specifications]</a> <b>Status:</b> <a href="lwg-active.html#Resolved">Resolved</a>
 <b>Submitter:</b> Jeffrey Yasskin <b>Opened:</b> 2013-09-03 <b>Last modified:</b> 2020-05-12</p>
<p><b>Priority: </b>3
</p>
<p><b>View other</b> <a href="lwg-index-open.html#structure.specifications">active issues</a> in [structure.specifications].</p>
<p><b>View all other</b> <a href="lwg-index.html#structure.specifications">issues</a> in [structure.specifications].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#Resolved">Resolved</a> status.</p>
<p><b>Discussion:</b></p>
<p>
The C++14 CD has 25 sections including the phrase "X shall not
participate in overload resolution ...". Most of these uses are double
negatives, which are hard to interpret. "shall not ... unless" tends
to be the easiest to read, since the condition is true when the
function is available, but we also have a lot of "if X is not Y, then
Z shall not participate", which actually means "You can call Z if X is
Y." The current wording is also clumsy and long-winded. We should find
a better and more concise phrasing.
<p/>
As an initial proposal, I'd suggest using "X is enabled if and only if Y" in prose
and adding an "<i>Enabled If:</i> ..." element to 16.3.2.4 <a href="https://wg21.link/structure.specifications">[structure.specifications]</a>.
<p/>
Daniel:
<p/>
I suggest to name this new specification element for 16.3.2.4 <a href="https://wg21.link/structure.specifications">[structure.specifications]</a>
as "<i>Template Constraints:</i>" instead, because the mentioned wording form was intentionally provided 
starting with LWG <a href="lwg-defects.html#1237" title="Constrained error_code&#47;error_condition members (Status: C++11)">1237</a><sup><a href="https://cplusplus.github.io/LWG/issue1237" title="Latest snapshot">(i)</a></sup> to give implementations more freedom to realize the 
concrete constraints. Instead of the original <code>std::enable_if</code>-based specifications
we can use better forms of "SFINAE" constraints today and it eases the path to possible language-based
constraints in the future.
</p>

<p><i>[2019-03-21; Daniel comments ]</i></p>

<p>
Apparently the adoption of <a href="https://wg21.link/p0788r3">P0788R3</a> at the Rapperswil 2018 meeting 
has resolved this issue by introduction of the new <i>Constraints:</i> element.
</p>

<p><i>[2020-05-10; Reflector discussions]</i></p>

<p>
Resolved by <a href="https://wg21.link/p0788r3">P0788R3</a> and the Mandating paper series culminating 
with <a href="https://wg21.link/p1460r1">P1460R1</a>.
</p>


<p><b>Rationale:</b></p>
Resolved by <a href="https://wg21.link/p0788r3">P0788R3</a> and finally by 
<a href="https://wg21.link/p1460r1">P1460R1</a>.


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





</body>
</html>
