Skip to content

Commit f122fa9

Browse files
committed
Updates P/R for 4316, following reflector discussion
1 parent 4cd438d commit f122fa9

File tree

1 file changed

+84
-3
lines changed

1 file changed

+84
-3
lines changed

xml/issue4316.xml

Lines changed: 84 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ Set priority to 1 after reflector poll.
4343
</p>
4444

4545
<note>2025-10-27; Tomasz provides wording.</note>
46-
</discussion>
47-
48-
<resolution>
46+
<superseded>
4947

5048
<p>
5149
This wording is relative to <paper num="N5014"/>.
@@ -126,6 +124,89 @@ context, the program is ill-formed. &mdash; <i>end note</i>]
126124
</li>
127125
</ol>
128126

127+
</superseded>
128+
129+
<note>2025-10-27; Reflector comments.</note>
130+
<p>
131+
We lost definition of `Z`. Use <tt><i>TARG-SPLICE</i>([:Args:])...</tt>.
132+
</p>
133+
134+
<note>2025-11-03; Tomasz provides wording.</note>
135+
</discussion>
136+
137+
<resolution>
138+
139+
<p>
140+
This wording is relative to <paper num="N5014"/>.
141+
</p>
142+
143+
<ol>
144+
145+
<li><p>Modify <sref ref="[meta.reflection.substitute]"/> as indicated:</p>
146+
147+
<blockquote>
148+
<blockquote>
149+
<p>
150+
<ins>-1- For value `x` of type `info`, and prvalue constant expression `X` that computes the
151+
reflection held by `x`, let <tt><i>TARG-SPLICE</i>(x)</tt> be:</ins>
152+
<ul>
153+
<li><ins>-1.1- <tt>template [: X :]</tt> if `is_template(x)` is `true`, otherwise</ins></li>
154+
<li><ins>-1.2- <tt>typename [: X :]</tt> if `is_type(x)` is `true`, otherwise</ins></li>
155+
<li><ins>-1.3- <tt>([: X :])</tt></ins></li>
156+
</ul>
157+
</p>
158+
</blockquote>
159+
160+
<pre>
161+
template&lt;reflection_range R = initializer_list&lt;info&gt;&gt;
162+
consteval bool can_substitute(info templ, R&amp;&amp; arguments);
163+
</pre>
164+
<blockquote>
165+
<p>
166+
-1- Let `Z` be the template represented by `templ` and let `Args...` be a
167+
sequence of prvalue constant expressions that compute the reflections held by
168+
the elements of `arguments`, in order.
169+
</p>
170+
<p>
171+
-2- <i>Returns</i>: `true` if <tt>Z&lt;<ins><i>TARG-SPLICE</i>(</ins>[:Args:]<ins>)</ins>...&gt;</tt> is a valid <i>template-id</i>
172+
(<sref ref="[temp.names]"/>) that does not name a function whose type contains an undeduced placeholder type.
173+
Otherwise, `false`.
174+
</p>
175+
<p>
176+
-3- <i>Throws</i>: `meta::exception` unless `templ` represents a template, and every reflection
177+
in `arguments` represents a construct usable as a template argument (<sref ref="[temp.arg]"/>).
178+
</p>
179+
<p>
180+
-4- [<i>Note</i>: If forming <tt>Z&lt;<ins><i>TARG-SPLICE</i>(</ins>[:Args:]<ins>)</ins>...&gt;</tt>
181+
leads to a failure outside of the immediate context, the program is ill-formed. &mdash; <i>end note</i>]
182+
</p>
183+
</blockquote>
184+
185+
<pre>
186+
template&lt;reflection_range R = initializer_list&lt;info&gt;&gt;
187+
consteval info substitute(info templ, R&amp;&amp; arguments);
188+
</pre>
189+
<blockquote>
190+
<p>
191+
-5- Let `Z` be the template represented by `templ` and let `Args...` be a
192+
sequence of prvalue constant expressions that compute the reflections held by
193+
the elements of `arguments`, in order.
194+
</p>
195+
<p>
196+
-6- <i>Returns</i>: <tt>Z&lt;<ins><i>TARG-SPLICE</i>(</ins>[:Args:]<ins>)</ins>...&gt;</tt>.</p>
197+
<p>
198+
-7- <i>Throws</i>: `meta::exception` unless `can_substitute(templ, arguments)` is `true`.
199+
</p>
200+
<p>
201+
-8- [<i>Note</i>: If forming <tt>Z&lt;<ins><i>TARG-SPLICE</i>(</ins>[:Args:]<ins>)</ins>...&gt;</tt>
202+
leads to a failure outside of the immediate context, the program is ill-formed. &mdash; <i>end note</i>]
203+
</p>
204+
</blockquote>
205+
206+
</blockquote>
207+
</li>
208+
</ol>
209+
129210
</resolution>
130211

131212
</issue>

0 commit comments

Comments
 (0)