<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 717: Incomplete valarray::operator[] specification in [valarray.access]</title>
<meta property="og:title" content="Issue 717: Incomplete valarray::operator[] specification in [valarray.access]">
<meta property="og:description" content="C++ library issue. Status: NAD Editorial">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue717.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_Editorial">NAD Editorial</a> status.</em></p>
<h3 id="717"><a href="lwg-closed.html#717">717</a>. Incomplete <code>valarray::operator[]</code> specification in [valarray.access]</h3>
<p><b>Section:</b> 29.6.2.4 <a href="https://wg21.link/valarray.access">[valarray.access]</a> <b>Status:</b> <a href="lwg-active.html#NAD_Editorial">NAD Editorial</a>
 <b>Submitter:</b> Daniel Kr&uuml;gler <b>Opened:</b> 2007-08-27 <b>Last modified:</b> 2016-01-28</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View all other</b> <a href="lwg-index.html#valarray.access">issues</a> in [valarray.access].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#NAD Editorial">NAD Editorial</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Since the return type of <code>valarray</code>'s <code>operator[] const</code> overload has been
changed to <code>const T&amp;</code> as described in <a href="lwg-defects.html#389" title="Const overload of valarray::operator[] returns by value (Status: CD1)">389</a><sup><a href="https://cplusplus.github.io/LWG/issue389" title="Latest snapshot">(i)</a></sup> several paragraphs of
the section 29.6.2.4 <a href="https://wg21.link/valarray.access">[valarray.access]</a> are now
incompletely
specified, because many requirements and guarantees should now also
apply to the const overload. Most notably, the address and reference
guarantees should be extended to the const overload case.
</p>


<p id="res-717"><b>Proposed resolution:</b></p>
<p>
Change 29.6.2.4 <a href="https://wg21.link/valarray.access">[valarray.access]</a>:
</p>

<blockquote>
<p>
-1- <del>When applied to a constant array, the subscript operator returns a
reference to the corresponding element of the array. When applied to a
non-constant array, t</del><ins>T</ins>he subscript operator returns a
reference to the corresponding element of the array.
</p>

<p>
-3- The expression <code>&amp;a[i+j] == &amp;a[i] + j</code> evaluates as <code>true</code> for all <code>size_t i</code>
and <code>size_t j</code> such that <code>i+j</code> is less 
than the length of the <del>non-constant</del> array <code>a</code>.
</p>

<p>
-4- Likewise, the expression <code>&amp;a[i] != &amp;b[j]</code> evaluates
as <code>true</code> for any two <del>non-constant</del> arrays <code>a</code> and
<code>b</code> and for any <code>size_t i</code> and <code>size_t j</code> such that
<code>i</code> is less than the length of <code>a</code> and <code>j</code> is less
than the length of <code>b</code>. This property indicates an absence of
aliasing and may be used to advantage by optimizing
compilers.<sup>281)</sup>
</p>

<p>
-5- The reference returned by the subscript operator for a<ins>n</ins> <del>non-constant</del> array is guaranteed to be valid until
the member function <code>resize(size_t, T)</code> (26.5.2.7) is called for that array or until the lifetime 
of that array ends, whichever happens first.
</p>

</blockquote>






</body>
</html>
