Skip to content

Commit 9f95ef1

Browse files
committed
Updates P/R for 4432
1 parent f89cc5f commit 9f95ef1

File tree

1 file changed

+44
-4
lines changed

1 file changed

+44
-4
lines changed

xml/issue4432.xml

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<issue num="4432" status="New">
55
<title>Clarify element initialization for <tt>meta::reflect_constant_array</tt></title>
66
<section>
7-
<sref ref="[meta.reflection.array]"/>
7+
<sref ref="[meta.define.static]"/>
88
</section>
99
<submitter>Tomasz Kamiński</submitter>
1010
<date>27 Oct 2025</date>
@@ -20,16 +20,15 @@ It is not clear what <i>e<sub>i</sub></i> is when proxy references are involved.
2020
<sref ref="[meta.reflection.array]"/> Clarify copy-initialization vs. direct-initialization use
2121
The initialization of <tt>P</tt> uses copy-initialization but the Mandates clause uses direct-initialization.
2222
</p>
23-
</discussion>
2423

25-
<resolution>
24+
<superseded>
2625
<p>
2726
This wording is relative to <paper num="N5014"/>.
2827
</p>
2928

3029
<ol>
3130

32-
<li><p>Modify <sref ref="[meta.reflection.array]"/> as indicated:</p>
31+
<li><p>Modify <sref ref="[meta.define.static]"/> as indicated:</p>
3332

3433
<pre>
3534
template&lt;ranges::input_range R&gt;
@@ -52,6 +51,47 @@ where <i><del>e<sub>i</sub></del><ins>it<sub>i</sub></ins></i> is <ins>an iterat
5251
</li>
5352
</ol>
5453

54+
</superseded>
55+
</discussion>
56+
57+
<resolution>
58+
<p>
59+
This wording is relative to <paper num="N5014"/>.
60+
</p>
61+
62+
<ol>
63+
64+
<li><p>Modify <sref ref="[meta.define.static]"/> as indicated:</p>
65+
66+
<pre>
67+
template&lt;ranges::input_range R&gt;
68+
consteval info reflect_constant_array(R&amp;&amp; r);
69+
</pre>
70+
<blockquote>
71+
<p>-8- Let <tt>T</tt> be <tt>ranges::range_value_t&lt;R&gt;</tt>
72+
<ins>and <i>e<sub>i</sub></i> be <tt>static_cast&lt;T&gt;(*<i>it<sub>i</sub></i>)</tt>,
73+
where <i>it<sub>i</sub></i> is an iterator to the <i>i<sup>th</sup></i> element of `r`</ins>.
74+
</p>
75+
<p>-9- <i>Mandates</i>:
76+
<tt>T</tt> is a structural type (<sref ref="[temp.param]"/>),
77+
<tt>is_constructible_v&lt;T, ranges::range_reference_t&lt;R&gt;&gt;</tt> is <tt>true</tt>, and
78+
<del><tt>is_copy_constructible_v&lt;T&gt;</tt> is <tt>true</tt></del>
79+
<ins><tt>T</tt> satisfies <tt>copy_constructible</tt></ins>.</p>
80+
<p>-10- Let <tt>V</tt> be the pack of values of type info of the same size as <tt>r</tt>,
81+
where the <i>i<sup>th</sup></i> element is <tt>reflect_constant(<i>e<sub>i</sub></i>)</tt><del>,
82+
where <i>e<sub>i</sub></i> is an iterator to the <i>i<sup>th</sup></i> element of <tt>r</tt></del>.
83+
</p>
84+
<p>[&hellip;]</p>
85+
<p>-13- Throws: <ins>Any exception thrown by evaluation of <i>e<sub>i</sub></i>, or</ins>
86+
`meta::exception` <del>unless</del><ins>if evaluation of</ins> <tt>reflect_constant(<del>e</del><ins><i>e<sub>i</sub></i></ins>)</tt>
87+
<ins>would exit via an exception for any iterator <i>it<sub>i</sub></i> for any element of `r`</ins>
88+
<del>is a constant subexpression for every element `e` of `r`</del>.</p>
89+
</blockquote>
90+
</li>
91+
</ol>
92+
5593
</resolution>
5694

95+
96+
5797
</issue>

0 commit comments

Comments
 (0)