Skip to content

Commit

Permalink
Automatic update from GitHub Actions workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions committed Nov 25, 2023
1 parent 6b06ccb commit f9f96ea
Show file tree
Hide file tree
Showing 22 changed files with 533 additions and 122 deletions.
139 changes: 139 additions & 0 deletions issue4018.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta charset="utf-8">
<title>Issue 4018: ranges::to's copy branch is underconstrained</title>
<style type="text/css">
p {text-align:justify}
li {text-align:justify}
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 {border-collapse: collapse;}
@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#New">New</a> status.</em></p>
<h3><a name="4018" href="lwg-active.html#4018">4018</a>. <tt>ranges::to</tt>'s copy branch is underconstrained</h3>
<p><b>Section:</b> 26.5.7.2 <a href="https://wg21.link/range.utility.conv.to">[range.utility.conv.to]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
<b>Submitter:</b> Hewill Kang <b>Opened:</b> 2023-11-25 <b>Last modified:</b> 2023-11-25</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#range.utility.conv.to">active issues</a> in [range.utility.conv.to].</p>
<p><b>View all other</b> <a href="lwg-index.html#range.utility.conv.to">issues</a> in [range.utility.conv.to].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Unlike other branches that return a prvalue <tt>C</tt>, this branch's <tt>C</tt> is returned by elidable move,
indicating that <tt>C</tt> needs to be move constructible (<a href="https://godbolt.org/z/dfqnx6Txq">demo</a>):
</p>
<blockquote><pre>
#include &lt;ranges&gt;
#include &lt;vector&gt;

struct nonmovable {
nonmovable() = default;
nonmovable(const nonmovable&amp;) = delete;
nonmovable&amp; operator=(const nonmovable&amp;) = delete;
};

template&lt;class T&gt;
struct nonmovable_vector : std::vector&lt;T&gt;, nonmovable { };

int main() {
int arr[] = {42};
auto v = std::ranges::to&lt;nonmovable_vector&lt;int&gt;&gt;(arr); // <span style="color:red;font-weight:bolder">hard error</span>
}
</pre></blockquote>


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

<ol>

<li><p>Modify 26.5.7.2 <a href="https://wg21.link/range.utility.conv.to">[range.utility.conv.to]</a> as indicated:</p>

<blockquote>
<pre>
template&lt;class C, input_range R, class... Args&gt; requires (!view&lt;C&gt;)
constexpr C to(R&amp;&amp; r, Args&amp;&amp;... args);
</pre>
<blockquote>
<p>
-1- <i>Mandates</i>: <tt>C</tt> is a cv-unqualified class type.
</p>
<p>
-2- <i>Returns</i>: An object of type <tt>C</tt> constructed from the elements of <tt>r</tt> in the following manner:
</p>
<ol style="list-style-type: none">
<li><p>(2.1) &mdash; If <tt>C</tt> does not satisfy <tt>input_range</tt> or
<tt>convertible_to&lt;range_reference_t&lt;R&gt;, range_value_t&lt;C&gt;&gt;</tt> is <tt>true</tt>:</p>
<ol style="list-style-type: none">
<li><p>(2.1.1) &mdash; [&hellip;]</p></li>
<li><p>(2.1.2) &mdash; [&hellip;]</p></li>
<li><p>(2.1.3) &mdash; [&hellip;]</p></li>
<li><p>(2.1.4) &mdash; Otherwise, if</p>
<ol style="list-style-type: none">
<li><p><ins>(2.1.4.?) &mdash; <tt>move_constructible&lt;C&gt;</tt> is <tt>true</tt>,</ins></p></li>
<li><p>(2.1.4.1) &mdash; <tt>constructible_from&lt;C, Args...&gt;</tt> is <tt>true</tt>, and</p></li>
<li><p>(2.1.4.2) &mdash; <tt><i>container-insertable</i>&lt;C, range_reference_t&lt;R&gt;&gt;</tt> is <tt>true</tt>:</p>
<blockquote><pre>
C c(std::forward&lt;Args&gt;(args)...);
if constexpr (sized_range&lt;R> &amp;&amp; <i>reservable-container</i>&lt;C&gt;)
c.reserve(static_cast&lt;range_size_t&lt;C&gt;&gt;(ranges::size(r)));
ranges::copy(r, <i>container-inserter</i>&lt;range_reference_t&lt;R&gt;&gt;(c));
</pre></blockquote></li>
</ol>
</li>
<li><p>(2.1.5) &mdash; Otherwise, the program is ill-formed.</p></li>
</ol></li>
<li><p>(2.2) &mdash; [&hellip;]</p></li>
<li><p>(2.3) &mdash; Otherwise, the program is ill-formed.</p></li>
</ol>

</blockquote>
</blockquote>
</li>

</ol>





</body>
</html>
99 changes: 95 additions & 4 deletions lwg-active.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
</tr>
</table>
<h1>C++ Standard Library Active Issues List (Revision D125)</h1>
<p><p>Revised 2023-11-25 at 16:27:19 UTC</p>
<p><p>Revised 2023-11-25 at 19:07:54 UTC</p>
</p>
<p>Reference ISO/IEC IS 14882:2020(E)</p>
<p>Also see:</p>
Expand Down Expand Up @@ -182,15 +182,15 @@ <h2 id='History'>Revision History</h2>
<ul>
<li>D125: 2023-06-09 Post-Varna<ul>
<li><b>Summary:</b><ul>
<li>461 open issues, up by 31.</li>
<li>462 open issues, up by 32.</li>
<li>3043 closed issues, up by 43.</li>
<li>35 reassigned issues, down by 1.</li>
<li>3539 issues total, up by 73.</li>
<li>3540 issues total, up by 74.</li>
</ul></li>
<li><b>Details:</b><ul>
<li>Added the following 4 Ready issues: <a href="lwg-active.html#3950">3950</a>, <a href="lwg-active.html#3975">3975</a>, <a href="lwg-active.html#3984">3984</a>, <a href="lwg-active.html#3988">3988</a>.</li>
<li>Added the following 6 Tentatively NAD issues: <a href="lwg-active.html#3958">3958</a>, <a href="lwg-active.html#3980">3980</a>, <a href="lwg-active.html#3981">3981</a>, <a href="lwg-active.html#3982">3982</a>, <a href="lwg-active.html#3996">3996</a>, <a href="lwg-active.html#4003">4003</a>.</li>
<li>Added the following 48 New issues: <a href="lwg-active.html#3945">3945</a>, <a href="lwg-active.html#3952">3952</a>, <a href="lwg-active.html#3954">3954</a>, <a href="lwg-active.html#3955">3955</a>, <a href="lwg-active.html#3956">3956</a>, <a href="lwg-active.html#3959">3959</a>, <a href="lwg-active.html#3960">3960</a>, <a href="lwg-active.html#3961">3961</a>, <a href="lwg-active.html#3962">3962</a>, <a href="lwg-active.html#3963">3963</a>, <a href="lwg-active.html#3964">3964</a>, <a href="lwg-active.html#3966">3966</a>, <a href="lwg-active.html#3967">3967</a>, <a href="lwg-active.html#3968">3968</a>, <a href="lwg-active.html#3969">3969</a>, <a href="lwg-active.html#3972">3972</a>, <a href="lwg-active.html#3976">3976</a>, <a href="lwg-active.html#3977">3977</a>, <a href="lwg-active.html#3978">3978</a>, <a href="lwg-active.html#3979">3979</a>, <a href="lwg-active.html#3983">3983</a>, <a href="lwg-active.html#3985">3985</a>, <a href="lwg-active.html#3986">3986</a>, <a href="lwg-active.html#3989">3989</a>, <a href="lwg-active.html#3991">3991</a>, <a href="lwg-active.html#3992">3992</a>, <a href="lwg-active.html#3993">3993</a>, <a href="lwg-active.html#3994">3994</a>, <a href="lwg-active.html#3995">3995</a>, <a href="lwg-active.html#3997">3997</a>, <a href="lwg-active.html#3998">3998</a>, <a href="lwg-active.html#3999">3999</a>, <a href="lwg-active.html#4000">4000</a>, <a href="lwg-active.html#4002">4002</a>, <a href="lwg-active.html#4004">4004</a>, <a href="lwg-active.html#4005">4005</a>, <a href="lwg-active.html#4006">4006</a>, <a href="lwg-active.html#4007">4007</a>, <a href="lwg-active.html#4008">4008</a>, <a href="lwg-active.html#4009">4009</a>, <a href="lwg-active.html#4010">4010</a>, <a href="lwg-active.html#4011">4011</a>, <a href="lwg-active.html#4012">4012</a>, <a href="lwg-active.html#4013">4013</a>, <a href="lwg-active.html#4014">4014</a>, <a href="lwg-active.html#4015">4015</a>, <a href="lwg-active.html#4016">4016</a>, <a href="lwg-active.html#4017">4017</a>.</li>
<li>Added the following 49 New issues: <a href="lwg-active.html#3945">3945</a>, <a href="lwg-active.html#3952">3952</a>, <a href="lwg-active.html#3954">3954</a>, <a href="lwg-active.html#3955">3955</a>, <a href="lwg-active.html#3956">3956</a>, <a href="lwg-active.html#3959">3959</a>, <a href="lwg-active.html#3960">3960</a>, <a href="lwg-active.html#3961">3961</a>, <a href="lwg-active.html#3962">3962</a>, <a href="lwg-active.html#3963">3963</a>, <a href="lwg-active.html#3964">3964</a>, <a href="lwg-active.html#3966">3966</a>, <a href="lwg-active.html#3967">3967</a>, <a href="lwg-active.html#3968">3968</a>, <a href="lwg-active.html#3969">3969</a>, <a href="lwg-active.html#3972">3972</a>, <a href="lwg-active.html#3976">3976</a>, <a href="lwg-active.html#3977">3977</a>, <a href="lwg-active.html#3978">3978</a>, <a href="lwg-active.html#3979">3979</a>, <a href="lwg-active.html#3983">3983</a>, <a href="lwg-active.html#3985">3985</a>, <a href="lwg-active.html#3986">3986</a>, <a href="lwg-active.html#3989">3989</a>, <a href="lwg-active.html#3991">3991</a>, <a href="lwg-active.html#3992">3992</a>, <a href="lwg-active.html#3993">3993</a>, <a href="lwg-active.html#3994">3994</a>, <a href="lwg-active.html#3995">3995</a>, <a href="lwg-active.html#3997">3997</a>, <a href="lwg-active.html#3998">3998</a>, <a href="lwg-active.html#3999">3999</a>, <a href="lwg-active.html#4000">4000</a>, <a href="lwg-active.html#4002">4002</a>, <a href="lwg-active.html#4004">4004</a>, <a href="lwg-active.html#4005">4005</a>, <a href="lwg-active.html#4006">4006</a>, <a href="lwg-active.html#4007">4007</a>, <a href="lwg-active.html#4008">4008</a>, <a href="lwg-active.html#4009">4009</a>, <a href="lwg-active.html#4010">4010</a>, <a href="lwg-active.html#4011">4011</a>, <a href="lwg-active.html#4012">4012</a>, <a href="lwg-active.html#4013">4013</a>, <a href="lwg-active.html#4014">4014</a>, <a href="lwg-active.html#4015">4015</a>, <a href="lwg-active.html#4016">4016</a>, <a href="lwg-active.html#4017">4017</a>, <a href="lwg-active.html#4018">4018</a>.</li>
<li>Added the following SG9 issue: <a href="lwg-active.html#3971">3971</a>.</li>
<li>Added the following 14 WP issues: <a href="lwg-defects.html#3946">3946</a>, <a href="lwg-defects.html#3947">3947</a>, <a href="lwg-defects.html#3948">3948</a>, <a href="lwg-defects.html#3949">3949</a>, <a href="lwg-defects.html#3951">3951</a>, <a href="lwg-defects.html#3953">3953</a>, <a href="lwg-defects.html#3957">3957</a>, <a href="lwg-defects.html#3965">3965</a>, <a href="lwg-defects.html#3970">3970</a>, <a href="lwg-defects.html#3973">3973</a>, <a href="lwg-defects.html#3974">3974</a>, <a href="lwg-defects.html#3987">3987</a>, <a href="lwg-defects.html#3990">3990</a>, <a href="lwg-defects.html#4001">4001</a>.</li>
<li>Changed the following issue to Ready (from New): <a href="lwg-active.html#3919">3919</a>.</li>
Expand Down Expand Up @@ -55650,5 +55650,96 @@ <h3><a name="4017" href="#4017">4017</a><sup><a href="https://cplusplus.github.i



<hr>
<h3><a name="4018" href="#4018">4018</a><sup><a href="https://cplusplus.github.io/LWG/issue4018">(i)</a></sup>. <tt>ranges::to</tt>'s copy branch is underconstrained</h3>
<p><b>Section:</b> 26.5.7.2 <a href="https://wg21.link/range.utility.conv.to">[range.utility.conv.to]</a> <b>Status:</b> <a href="lwg-active.html#New">New</a>
<b>Submitter:</b> Hewill Kang <b>Opened:</b> 2023-11-25 <b>Last modified:</b> 2023-11-25</p>
<p><b>Priority: </b>Not Prioritized
</p>
<p><b>View other</b> <a href="lwg-index-open.html#range.utility.conv.to">active issues</a> in [range.utility.conv.to].</p>
<p><b>View all other</b> <a href="lwg-index.html#range.utility.conv.to">issues</a> in [range.utility.conv.to].</p>
<p><b>View all issues with</b> <a href="lwg-status.html#New">New</a> status.</p>
<p><b>Discussion:</b></p>
<p>
Unlike other branches that return a prvalue <tt>C</tt>, this branch's <tt>C</tt> is returned by elidable move,
indicating that <tt>C</tt> needs to be move constructible (<a href="https://godbolt.org/z/dfqnx6Txq">demo</a>):
</p>
<blockquote><pre>
#include &lt;ranges&gt;
#include &lt;vector&gt;

struct nonmovable {
nonmovable() = default;
nonmovable(const nonmovable&amp;) = delete;
nonmovable&amp; operator=(const nonmovable&amp;) = delete;
};

template&lt;class T&gt;
struct nonmovable_vector : std::vector&lt;T&gt;, nonmovable { };

int main() {
int arr[] = {42};
auto v = std::ranges::to&lt;nonmovable_vector&lt;int&gt;&gt;(arr); // <span style="color:red;font-weight:bolder">hard error</span>
}
</pre></blockquote>


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

<ol>

<li><p>Modify 26.5.7.2 <a href="https://wg21.link/range.utility.conv.to">[range.utility.conv.to]</a> as indicated:</p>

<blockquote>
<pre>
template&lt;class C, input_range R, class... Args&gt; requires (!view&lt;C&gt;)
constexpr C to(R&amp;&amp; r, Args&amp;&amp;... args);
</pre>
<blockquote>
<p>
-1- <i>Mandates</i>: <tt>C</tt> is a cv-unqualified class type.
</p>
<p>
-2- <i>Returns</i>: An object of type <tt>C</tt> constructed from the elements of <tt>r</tt> in the following manner:
</p>
<ol style="list-style-type: none">
<li><p>(2.1) &mdash; If <tt>C</tt> does not satisfy <tt>input_range</tt> or
<tt>convertible_to&lt;range_reference_t&lt;R&gt;, range_value_t&lt;C&gt;&gt;</tt> is <tt>true</tt>:</p>
<ol style="list-style-type: none">
<li><p>(2.1.1) &mdash; [&hellip;]</p></li>
<li><p>(2.1.2) &mdash; [&hellip;]</p></li>
<li><p>(2.1.3) &mdash; [&hellip;]</p></li>
<li><p>(2.1.4) &mdash; Otherwise, if</p>
<ol style="list-style-type: none">
<li><p><ins>(2.1.4.?) &mdash; <tt>move_constructible&lt;C&gt;</tt> is <tt>true</tt>,</ins></p></li>
<li><p>(2.1.4.1) &mdash; <tt>constructible_from&lt;C, Args...&gt;</tt> is <tt>true</tt>, and</p></li>
<li><p>(2.1.4.2) &mdash; <tt><i>container-insertable</i>&lt;C, range_reference_t&lt;R&gt;&gt;</tt> is <tt>true</tt>:</p>
<blockquote><pre>
C c(std::forward&lt;Args&gt;(args)...);
if constexpr (sized_range&lt;R> &amp;&amp; <i>reservable-container</i>&lt;C&gt;)
c.reserve(static_cast&lt;range_size_t&lt;C&gt;&gt;(ranges::size(r)));
ranges::copy(r, <i>container-inserter</i>&lt;range_reference_t&lt;R&gt;&gt;(c));
</pre></blockquote></li>
</ol>
</li>
<li><p>(2.1.5) &mdash; Otherwise, the program is ill-formed.</p></li>
</ol></li>
<li><p>(2.2) &mdash; [&hellip;]</p></li>
<li><p>(2.3) &mdash; Otherwise, the program is ill-formed.</p></li>
</ol>

</blockquote>
</blockquote>
</li>

</ol>





</body>
</html>
Loading

0 comments on commit f9f96ea

Please sign in to comment.