Skip to content

Commit af422eb

Browse files
committed
Matthias Kretz improves wording, Daniel adjusts to CD draft
1 parent e93122f commit af422eb

File tree

1 file changed

+132
-3
lines changed

1 file changed

+132
-3
lines changed

xml/issue4230.xml

Lines changed: 132 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ simd<complex<double>, 4> sc1(simd<double, 4>(1.), simd<floa
4545
Set priority to 2 after reflector poll.
4646
</p>
4747

48-
</discussion>
49-
50-
<resolution>
48+
<superseded>
5149
<p>
5250
This wording is relative to <paper num="N5008"/>.
5351
</p>
@@ -153,6 +151,137 @@ where the <tt><i>i</i></tt><sup>th</sup> element is initialized to the result of
153151
</blockquote>
154152
</li>
155153

154+
</ol>
155+
</superseded>
156+
157+
<note>2025-07-21; Matthias Kretz comments</note>
158+
<p>
159+
The currently shown P/R says:
160+
</p>
161+
<blockquote><p>
162+
<i>Remarks</i>: The expression inside `explicit` evaluates to `false` if and only if
163+
the floating-point conversion rank of `T::value_type` is greater than or equal
164+
to the floating-point conversion rank of <tt><i>real-type</i>::value_type</tt>.
165+
</p></blockquote>
166+
<p>
167+
But, by construction, <tt><i>real-type</i>::value_type</tt> is the same as `T::value_type`.
168+
So we get an elaborately worded `explicit(false)` here (which is correct).
169+
Consequently, the proposed resolution needs to strike `explicit(<i>see below</i>)`
170+
from <sref ref="[simd.overview]"/> and <sref ref="[simd.ctor]"/> and drop the Remarks paragraph (21).
171+
</p>
172+
</discussion>
173+
174+
<resolution>
175+
<p>
176+
This wording is relative to this
177+
<a href="https://github.com/cplusplus/draft/actions/runs/16433597877/artifacts/3583518547">CD preview draft</a>.
178+
</p>
179+
180+
181+
<ol>
182+
183+
<li><p>Modify <sref ref="[simd.overview]"/>, class template `basic_vec` synopsis, as indicated:</p>
184+
185+
<blockquote>
186+
<pre>
187+
namespace std::simd {
188+
template&lt;class T, class Abi&gt; class basic_vec {
189+
public:
190+
using value_type = T;
191+
using mask_type = basic_mask&lt;sizeof(T), Abi&gt;;
192+
using abi_type = Abi;
193+
using iterator = <i>simd-iterator</i>&lt;basic_vec&gt;;
194+
using const_iterator = <i>simd-iterator</i>&lt;const basic_vec&gt;;
195+
196+
<ins>using <i>real-type</i> = rebind_t&lt;typename T::value_type, basic_vec&gt; <i>// exposition-only</i></ins>
197+
198+
<i>// <sref ref="[simd.ctor]"/>, basic_vec constructors</i>
199+
[&hellip;]
200+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
201+
constexpr <del>explicit(<i>see below</i>)</del> basic_vec(const <ins><i>real-type</i></ins><del>V</del>&amp; reals, const <ins><i>real-type</i></ins><del>V</del>&amp; imags = {}) noexcept;
202+
[&hellip;]
203+
<i>// <sref ref="[simd.complex.access]"/>, basic_vec complex-value accessors</i>
204+
constexpr <ins><i>real-type</i></ins><del>auto</del> real() const noexcept;
205+
constexpr <ins><i>real-type</i></ins><del>auto</del> imag() const noexcept;
206+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
207+
constexpr void real(const <ins><i>real-type</i></ins><del>V</del>&amp; v) noexcept;
208+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
209+
constexpr void imag(const <ins><i>real-type</i></ins><del>V</del>&amp; v) noexcept;
210+
[&hellip;]
211+
};
212+
[&hellip;]
213+
}
214+
</pre>
215+
</blockquote>
216+
</li>
217+
218+
<li><p>Modify <sref ref="[simd.ctor]"/> as indicated:</p>
219+
220+
<blockquote>
221+
<pre>
222+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
223+
constexpr <del>explicit(<i>see below</i>)</del>
224+
basic_vec(const <ins><i>real-type</i></ins><del>V</del>&amp; reals, const <ins><i>real-type</i></ins><del>V</del>&amp; imags = {}) noexcept;
225+
</pre>
226+
<blockquote>
227+
<p>
228+
-19- <i>Constraints</i>:
229+
</p>
230+
<ol style="list-style-type: none">
231+
<li><p><del>(19.1) &mdash;</del> <tt><i>simd-complex</i>&lt;basic_vec&gt;</tt> is modeled<ins>.</ins><del>, and</del></p></li>
232+
<li><p><del>(19.2) &mdash; `V::size() == size()` is `true`.</del></p></li>
233+
</ol>
234+
<p>
235+
[&hellip;]
236+
<p/>
237+
<del>-21- <i>Remarks</i>: The expression inside `explicit` evaluates to `false` if and only if the
238+
floating-point conversion rank of `T::value_type` is greater than or equal to the floating-point
239+
conversion rank of <tt>V::value_type</tt>.</del>
240+
</p>
241+
</blockquote>
242+
</blockquote>
243+
</li>
244+
245+
<li><p>Modify <sref ref="[simd.complex.access]"/> as indicated:</p>
246+
247+
<blockquote>
248+
<pre>
249+
constexpr <ins><i>real-type</i></ins><del>auto</del> real() const noexcept;
250+
constexpr <ins><i>real-type</i></ins><del>auto</del> imag() const noexcept;
251+
</pre>
252+
<blockquote>
253+
<p>
254+
-1- <i>Constraints</i>: <tt><i>simd-complex</i>&lt;basic_vec&gt;</tt> is modeled.
255+
<p/>
256+
-2- <i>Returns</i>: An object of type <tt><ins><i>real-type</i></ins><del>rebind_t&lt;typename T::value_type, basic_vec&gt;</del></tt>
257+
where the <tt><i>i</i></tt><sup>th</sup> element is initialized to the result of
258+
<tt><i>cmplx-func</i>(operator[](<i>i</i>))</tt> for all <tt><i>i</i></tt> in the range
259+
`[0, size())`, where <tt><i>cmplx-func</i></tt> is the corresponding function from
260+
<tt>&lt;complex&gt;</tt>.
261+
</p>
262+
</blockquote>
263+
<pre>
264+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
265+
constexpr void real(const <ins><i>real-type</i></ins><del>V</del>&amp; v) noexcept;
266+
<del>template&lt;<i>simd-floating-point</i> V&gt;</del>
267+
constexpr void imag(const <ins><i>real-type</i></ins><del>V</del>&amp; v) noexcept;
268+
</pre>
269+
<blockquote>
270+
<p>
271+
-3- <i>Constraints</i>:
272+
</p>
273+
<ol style="list-style-type: none">
274+
<li><p><del>(3.1) &mdash;</del> <tt><i>simd-complex</i>&lt;basic_vec&gt;</tt> is modeled<ins>.</ins><del>,</del></p></li>
275+
<li><p><del>(3.2) &mdash; <tt>same_as&lt;typename V::value_type, typename T::value_type&gt;</tt> is modeled, and</del></p></li>
276+
<li><p><del>(3.3) &mdash; `V::size() == size()` is `true`.</del></p></li>
277+
</ol>
278+
<p>
279+
[&hellip;]
280+
</p>
281+
</blockquote>
282+
</blockquote>
283+
</li>
284+
156285
</ol>
157286
</resolution>
158287

0 commit comments

Comments
 (0)