<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 1030: Missing requirements for smart-pointer safety API</title>
<meta property="og:title" content="Issue 1030: Missing requirements for smart-pointer safety API">
<meta property="og:description" content="C++ library issue. Status: C++11">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue1030.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++11">C++11</a> status.</em></p>
<h3 id="1030"><a href="lwg-defects.html#1030">1030</a>. Missing requirements for smart-pointer safety API</h3>
<p><b>Section:</b> 99 [depr.util.smartptr.shared.atomic] <b>Status:</b> <a href="lwg-active.html#C++11">C++11</a>
 <b>Submitter:</b> Alisdair Meredith <b>Opened:</b> 2009-03-11 <b>Last modified:</b> 2017-11-29</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#depr.util.smartptr.shared.atomic">issues</a> in [depr.util.smartptr.shared.atomic].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#C++11">C++11</a> status.</p>
<p><b>Discussion:</b></p>

<p><b>Addresses JP 44 [CD1]</b></p>

<p>
The 1st parameter <code>p</code> and 2nd parameter <code>v</code> is now
<code>shared_ptr&lt;T&gt;*</code>.
</p>
<p>
It should be <code>shared_ptr&lt;T&gt;&amp;</code>, or if these are
<code>shared_ptr&lt;T&gt;*</code> then add the "<code>p</code> shall not be a
null pointer" at the requires.
</p>

<p><i>[
Summit:
]</i></p>


<blockquote><p>
Agree. All of the functions need a requirement that <code>p</code> (or
<code>v</code>) is a pointer to a valid object.
</p></blockquote>

<p><i>[
2009-07 post-Frankfurt:
]</i></p>


<blockquote>
<p>
Lawrence explained that these signatures match the regular atomics. The
regular atomics must not use references because these signatures are
shared with C. The decision to pass shared_ptrs by pointer rather than
by reference was deliberate and was motivated by the principle of least
surprise.
</p>
<p>
Lawrence to write wording that requires that the pointers not be null.
</p>
</blockquote>

<p><i>[
2009-09-20 Lawrence provided wording:
]</i></p>


<blockquote>
<p>
The parameter types for atomic shared pointer access
were deliberately chosen to be pointers
to match the corresponding parameters of the atomics chapter.
Those in turn were deliberately chosen
to match C functions,
which do not have reference parameters.
</p>
<p>
We adopt the second suggestion,
to require that such pointers not be null.
</p>
</blockquote>

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


<blockquote><p>
Moved to Ready.
</p></blockquote>



<p id="res-1030"><b>Proposed resolution:</b></p>
<p>
In section "<code>shared_ptr</code> atomic access"
 [util.smartptr.shared.atomic], add to each function the
following clause.
</p>
<blockquote><p>
<i>Requires:</i> <code>p</code> shall not be null.
</p></blockquote>





</body>
</html>
