<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2078: Throw specification of async() incomplete</title>
<meta property="og:title" content="Issue 2078: Throw specification of async() incomplete">
<meta property="og:description" content="C++ library issue. Status: C++14">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2078.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#C++14">C++14</a> status.</em></p>
<h3 id="2078"><a href="lwg-defects.html#2078">2078</a>. Throw specification of <code>async()</code> incomplete</h3>
<p><b>Section:</b> 32.10.9 <a href="https://wg21.link/futures.async">[futures.async]</a> <b>Status:</b> <a href="lwg-active.html#C++14">C++14</a>
 <b>Submitter:</b> Nicolai Josuttis <b>Opened:</b> 2011-08-29 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#futures.async">active issues</a> in [futures.async].</p>
<p><b>View all other</b> <a href="lwg-index.html#futures.async">issues</a> in [futures.async].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#C++14">C++14</a> status.</p>
<p><b>Discussion:</b></p>

<p>
The current throw specification of <code>async()</code> does state:
</p>
<blockquote><p>
-6- <i>Throws</i>: <code>system_error</code> if policy is <code>launch::async</code> and 
the implementation is unable to start a new thread.
</p></blockquote>
<p>
First it seems not clear whether this only applies if policy equals 
<code>launch::async</code> of if the <code>async</code> launch mode flag is set 
(if <code>policy|launch::async!=0</code>)
<p/>
In the discussion Lawrence Crowl also wrote:
</p>
<blockquote><p>
    More generally, I think what we want to say is that if the
    implementation cannot successfully execute on one of the policies
    allowed, then it must choose another. The principle would apply
    to implementation-defined policies as well.
</p></blockquote>

<p>
Peter Sommerlad:
</p>
<blockquote><p>
Should not throw. That was the intent. "is async" meat exactly.
</p></blockquote>

<p><i>[2012, Portland: move to Tentatively NAD Editorial]</i></p>

<p>
If no launch policy, it is undefined behavior.
</p>
<p>
Agree with Lawrence, should try all the allowed policies. We will rephrase so that
the policy argument should be <code>lauch::async</code>. Current wording seems good enough.
</p>
<p>
We believe this choice of policy statement is really an editorial issue.
</p>

<p><i>[2013-09 Chicago]</i></p>

<p>
If all the implementors read it and can't get it right - it is not editorial. Nico to provide wording
</p>
<p>
No objections to revised wording, so moved to Immediate.
</p>
<p>
Accept for Working Paper
</p>


<p id="res-2078"><b>Proposed resolution:</b></p>
<p>This wording is relative to N3691.</p>

<ol>
<li><p>Change 32.10.9 <a href="https://wg21.link/futures.async">[futures.async]</a> p6, p7 as indicated:</p>

<blockquote>
<p>
-6- <i>Throws:</i> <code>system_error</code> if <code>policy</code> <del>is</del> <ins><code>==</code></ins> <code>launch::async</code> 
and the implementation is unable to start a new thread.
</p>
<p>
-7- <i>Error conditions:</i>
</p>
<ul>
<li><p> <code>resource_unavailable_try_again</code> &mdash; if <code>policy</code> <del>is</del> <ins><code>==</code></ins> <code>launch::async</code> 
and the system is unable to start a new thread.</p>
</li>
</ul>
</blockquote>
</li>
</ol>






</body>
</html>
