<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 1258: std::function Effects clause impossible to satisfy</title>
<meta property="og:title" content="Issue 1258: std::function Effects clause impossible to satisfy">
<meta property="og:description" content="C++ library issue. Status: Resolved">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue1258.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="1258"><a href="lwg-defects.html#1258">1258</a>. std::function Effects clause impossible to satisfy</h3>
<p><b>Section:</b> 22.10.17.3.3 <a href="https://wg21.link/func.wrap.func.mod">[func.wrap.func.mod]</a> <b>Status:</b> <a href="lwg-active.html#Resolved">Resolved</a>
 <b>Submitter:</b> Daniel Kr&uuml;gler <b>Opened:</b> 2009-11-05 <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#Resolved">Resolved</a> status.</p>
<p><b>Discussion:</b></p>
<p>
As of 22.10.17.3.3 <a href="https://wg21.link/func.wrap.func.mod">[func.wrap.func.mod]</a>/2+ we have the following
prototype description:
</p>

<blockquote><pre>
template&lt;class F, Allocator Alloc&gt;
  void assign(F, const Alloc&amp;);
</pre>
<blockquote><p>
<i>Effects:</i> <code>function(f, a).swap(*this)</code>
</p></blockquote>
</blockquote>

<p>
Two things: First the concept debris needs to be removed, second and
much more importantly, the effects clause is now impossible to satisfy,
because there is no constructor that would match the parameter sequence
(<code>FunctionObject</code>, <code>Allocator</code>) [plus the fact that no
<code>f</code> and no <code>a</code> is part of the signature]. The most
probable candidate is
</p>

<blockquote><pre>
template&lt;class F, class A&gt; function(allocator_arg_t, const A&amp;, F);
</pre></blockquote>

<p>
and the effects clause needs to be adapted to use this signature.
</p>

<p><i>[
2009-11-13 Daniel brought wording up to date.
]</i></p>


<p><i>[
2009-11-15 Moved to Tentatively Ready after 5 positive votes on c++std-lib.
]</i></p>


<p><i>[
2010-02-11 Moved to Tentatively NAD Editorial after 5 positive votes on
c++std-lib.  It was noted that this issue was in partial conflict with <a href="lwg-defects.html#1288" title="std::function assignment from rvalues (Status: C++11)">1288</a><sup><a href="https://cplusplus.github.io/LWG/issue1288" title="Latest snapshot">(i)</a></sup>, and the two issues were merged in <a href="lwg-defects.html#1288" title="std::function assignment from rvalues (Status: C++11)">1288</a><sup><a href="https://cplusplus.github.io/LWG/issue1288" title="Latest snapshot">(i)</a></sup>.
]</i></p>


<p><b>Rationale:</b></p>
<p>
Addressed by <a href="lwg-defects.html#1288" title="std::function assignment from rvalues (Status: C++11)">1288</a><sup><a href="https://cplusplus.github.io/LWG/issue1288" title="Latest snapshot">(i)</a></sup>.
</p>




<p id="res-1258"><b>Proposed resolution:</b></p>
<p>
Change in 22.10.17.3.3 <a href="https://wg21.link/func.wrap.func.mod">[func.wrap.func.mod]</a> the complete prototype description as
indicated
</p>
<p><i>[
Question to
the editor: Shouldn't there a paragraph number in front of the Effects clause?
]</i></p>


<blockquote><pre>
template&lt;class F, <del>Allocator Alloc</del><ins>class A</ins>>
  void assign(F <ins>f</ins>, const A<del>lloc</del>&amp; <ins>a</ins>);
</pre>
<blockquote><p>
<ins>3</ins> <i>Effects:</i> <code>function(<del>f, a</del><ins>allocator_arg, a,
f</ins>).swap(*this)</code>
</p></blockquote>
</blockquote>





</body>
</html>
