<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 1228: User-specialized nothrow type traits</title>
<meta property="og:title" content="Issue 1228: User-specialized nothrow type traits">
<meta property="og:description" content="C++ library issue. Status: NAD">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue1228.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="1228"><a href="lwg-closed.html#1228">1228</a>. User-specialized nothrow type traits</h3>
<p><b>Section:</b> 21.3.6.4 <a href="https://wg21.link/meta.unary.prop">[meta.unary.prop]</a> <b>Status:</b> <a href="lwg-active.html#NAD">NAD</a>
 <b>Submitter:</b> Alisdair Meredith <b>Opened:</b> 2009-10-07 <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#meta.unary.prop">active issues</a> in [meta.unary.prop].</p>
<p><b>View all other</b> <a href="lwg-index.html#meta.unary.prop">issues</a> in [meta.unary.prop].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD">NAD</a> status.</p>
<p><b>Discussion:</b></p>
<p>
According to p1 21.3.3 <a href="https://wg21.link/meta.type.synop">[meta.type.synop]</a>:
</p>

<blockquote><p>
The behavior of a program that adds specializations for any of the class
templates defined in this subclause is undefined unless otherwise
specified.
</p></blockquote>

<p>
I believe we should 'otherwise specify' for the nothrow traits, are
these are exactly the use cases where the end user actually has more
information than the compiler.
</p>

<p><i>[
2009-10 Santa Cruz:
]</i></p>


<blockquote><p>
Moved to Open.  Definitely need to give the users the ability to ensure
that the traits give the right answers. Unsure we want to give them the
ability to say this in more than one way. Believes the noexcept proposal
already gives this.
</p></blockquote>

<p><i>[
2010 Pittsburgh:  Moved to NAD, rationale added below.
]</i></p>




<p><b>Rationale:</b></p>
<p>
We believe the solution offered by
<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html">N3050</a>
is superior.
</p>


<p id="res-1228"><b>Proposed resolution:</b></p>
<p>
Add the following comment:
</p>

<blockquote><p>
user specialization permitted to derive from <code>std::true_type</code> when the
operation is known not to throw.
</p></blockquote>

<p>
to the following traits in 21.3.6.4 <a href="https://wg21.link/meta.unary.prop">[meta.unary.prop]</a> Table 43 Type
property predicates.
</p>

<p><i>[
This may require a new Comments column
]</i></p>


<blockquote><pre>
has_nothrow_default_constructor
has_nothrow_copy_constructor
has_nothrow_assign
</pre></blockquote>





</body>
</html>
