@@ -45,9 +45,7 @@ simd<complex<double>, 4> sc1(simd<double, 4>(1.), simd<floa
4545Set priority to 2 after reflector poll.
4646</p >
4747
48- </discussion >
49-
50- <resolution >
48+ <superseded >
5149<p >
5250This 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< class T, class Abi> class basic_vec {
189+ public:
190+ using value_type = T;
191+ using mask_type = basic_mask< sizeof(T), Abi> ;
192+ using abi_type = Abi;
193+ using iterator = <i >simd-iterator</i >< basic_vec> ;
194+ using const_iterator = <i >simd-iterator</i >< const basic_vec> ;
195+
196+ <ins >using <i >real-type</i > = rebind_t< typename T::value_type, basic_vec> <i >// exposition-only</i ></ins >
197+
198+ <i >// <sref ref =" [simd.ctor]" />, basic_vec constructors</i >
199+ [… ]
200+ <del >template< <i >simd-floating-point</i > V> </del >
201+ constexpr <del >explicit(<i >see below</i >)</del > basic_vec(const <ins ><i >real-type</i ></ins ><del >V</del >& reals, const <ins ><i >real-type</i ></ins ><del >V</del >& imags = {}) noexcept;
202+ [… ]
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< <i >simd-floating-point</i > V> </del >
207+ constexpr void real(const <ins ><i >real-type</i ></ins ><del >V</del >& v) noexcept;
208+ <del >template< <i >simd-floating-point</i > V> </del >
209+ constexpr void imag(const <ins ><i >real-type</i ></ins ><del >V</del >& v) noexcept;
210+ [… ]
211+ };
212+ [… ]
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< <i >simd-floating-point</i > V> </del >
223+ constexpr <del >explicit(<i >see below</i >)</del >
224+ basic_vec(const <ins ><i >real-type</i ></ins ><del >V</del >& reals, const <ins ><i >real-type</i ></ins ><del >V</del >& 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) — </del > <tt ><i >simd-complex</i >< basic_vec> </tt > is modeled<ins >.</ins ><del >, and</del ></p ></li >
232+ <li ><p ><del >(19.2) — `V::size() == size()` is `true`.</del ></p ></li >
233+ </ol >
234+ <p >
235+ [… ]
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 >< basic_vec> </tt > is modeled.
255+ <p />
256+ -2- <i >Returns</i >: An object of type <tt ><ins ><i >real-type</i ></ins ><del >rebind_t< typename T::value_type, basic_vec> </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 >< complex> </tt >.
261+ </p >
262+ </blockquote >
263+ <pre >
264+ <del >template< <i >simd-floating-point</i > V> </del >
265+ constexpr void real(const <ins ><i >real-type</i ></ins ><del >V</del >& v) noexcept;
266+ <del >template< <i >simd-floating-point</i > V> </del >
267+ constexpr void imag(const <ins ><i >real-type</i ></ins ><del >V</del >& 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) — </del > <tt ><i >simd-complex</i >< basic_vec> </tt > is modeled<ins >.</ins ><del >,</del ></p ></li >
275+ <li ><p ><del >(3.2) — <tt >same_as< typename V::value_type, typename T::value_type> </tt > is modeled, and</del ></p ></li >
276+ <li ><p ><del >(3.3) — `V::size() == size()` is `true`.</del ></p ></li >
277+ </ol >
278+ <p >
279+ [… ]
280+ </p >
281+ </blockquote >
282+ </blockquote >
283+ </li >
284+
156285</ol >
157286</resolution >
158287
0 commit comments