<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Issue 3364: Initialize data members of ranges and their iterators</title>
<meta property="og:title" content="Issue 3364: Initialize data members of ranges and their iterators">
<meta property="og:description" content="C++ library issue. Status: C++20">
<meta property="og:url" content="https://cplusplus.github.io/LWG/issue3364.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++20">C++20</a> status.</em></p>
<h3 id="3364"><a href="lwg-defects.html#3364">3364</a>. Initialize data members of ranges and their iterators</h3>
<p><b>Section:</b> 25.7.11.2 <a href="https://wg21.link/range.take.while.view">[range.take.while.view]</a>, 25.7.12.2 <a href="https://wg21.link/range.drop.view">[range.drop.view]</a>, 25.7.13.2 <a href="https://wg21.link/range.drop.while.view">[range.drop.while.view]</a>, 25.7.23.3 <a href="https://wg21.link/range.elements.iterator">[range.elements.iterator]</a> <b>Status:</b> <a href="lwg-active.html#C++20">C++20</a>
 <b>Submitter:</b> Johel Ernesto Guerrero Pe&ntilde;a <b>Opened:</b> 2020-01-07 <b>Last modified:</b> 2021-02-25</p>
<p><b>Priority: </b>0
</p>
<p><b>View all other</b> <a href="lwg-index.html#range.take.while.view">issues</a> in [range.take.while.view].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#C++20">C++20</a> status.</p>
<p><b>Discussion:</b></p>
<p>Before <a href="https://wg21.link/p1035">P1035</a> was accepted, no data member in [ranges] whose type could
potentially be an aggregate or fundamental type was left without initializer. P1035 left some such data members 
without initializer, so it is possible to have them have indeterminate values. We propose restoring consistency.</p>

<p><i>[2020-01-14 Status set to Tentatively Ready after five positive votes on the reflector.]</i></p>



<p id="res-3364"><b>Proposed resolution:</b></p>
<p>This wording is relative to <a href="https://wg21.link/N4842">N4842</a>.</p>

<ol>
<li><p>Modify 25.7.11.2 <a href="https://wg21.link/range.take.while.view">[range.take.while.view]</a> as follows:</p>
<blockquote>
<pre>
class take_while_view : public view_interface&lt;take_while_view&lt;V, Pred&gt;&gt; {
  template&lt;bool&gt; class sentinel;                      <i>// exposition only</i>

  V base_ <ins>= V()</ins>;                                      <i>// exposition only</i>
  semiregular-box&lt;Pred&gt; pred_;                        <i>// exposition only</i>

public:
</pre>
</blockquote>
</li>

<li><p>Modify 25.7.12.2 <a href="https://wg21.link/range.drop.view">[range.drop.view]</a> as follows:</p>
<blockquote>
<pre>
private:
  V base_ <ins>= V()</ins>;                                     <i>// exposition only</i>
  range_difference_t&lt;V&gt; count_ <ins>= 0</ins>;                  <i>// exposition only</i>
};
</pre>
</blockquote>
</li>

<li><p>Modify 25.7.13.2 <a href="https://wg21.link/range.drop.while.view">[range.drop.while.view]</a> as follows:</p>
<blockquote>
<pre>
private:
  V base_ <ins>= V()</ins>;                                     <i>// exposition only</i>
  semiregular-box&lt;Pred&gt; pred_;                       <i>// exposition only</i>
};
</pre>
</blockquote>
</li>

<li><p>Modify 25.7.23.3 <a href="https://wg21.link/range.elements.iterator">[range.elements.iterator]</a> as follows:</p>
<blockquote>
<pre>
class elements_view&lt;V, N&gt;::iterator {                <i>// exposition only</i>
  using base-t = conditional_t&lt;Const, const V, V&gt;;
  friend iterator&lt;!Const&gt;;

  iterator_t&lt;base-t&gt; current_ <ins>= iterator_t&lt;base-t&gt;()</ins>;
public:
</pre>
</blockquote>
</li>

</ol>





</body>
</html>
