<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 2073: Library exceptions that take string arguments</title>
<meta property="og:title" content="Issue 2073: Library exceptions that take string arguments">
<meta property="og:description" content="C++ library issue. Status: NAD">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue2073.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="2073"><a href="lwg-closed.html#2073">2073</a>. Library exceptions that take string arguments</h3>
<p><b>Section:</b> 19.2 <a href="https://wg21.link/std.exceptions">[std.exceptions]</a>, 19.5.8 <a href="https://wg21.link/syserr.syserr">[syserr.syserr]</a>, 31.5.2.2.1 <a href="https://wg21.link/ios.failure">[ios.failure]</a> <b>Status:</b> <a href="lwg-active.html#NAD">NAD</a>
 <b>Submitter:</b> Eelis van der Weegen <b>Opened:</b> 2011-08-16 <b>Last modified:</b> 2023-02-07</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#std.exceptions">issues</a> in [std.exceptions].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD">NAD</a> status.</p>
<p><b>Discussion:</b></p>

<p>
This is an extension issue for LWG to add constructor overloads that take a 
<code>string</code> by an rvalue reference in order to move the string into the 
exception.
</p>

<p><i>[2012, Kona]</i></p>

<p>
Move to NAD.
</p>
<p>
This was discussed during C++11 standardization, and deemed (at the time) to be a conforming
extension that vendors are free to add, but there seemed no need to call it out in the standard.
Since then it has been noted that the rvalue-reference overloads do not give you the move-semantic
guarantee the proposer is thought to be looking for, as in order to meet the requirements that
copy constructors do not throw (for standard exceptions) the exceptions that store strings must
actually store a reference-counted immutable string, rather than an <code>std::string</code> internally.
Therefore, an rvalue-reference overload is going to have to allocate memory in exactly the same
way as copying from a <code>const string&amp;</code> argument.
</p>



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





</body>
</html>
