@@ -45,6 +45,211 @@ specialization of `layout_stride`.
4545Set priority to 2 after reflector poll.
4646</p >
4747
48+ <superseded >
49+ <p >
50+ This wording is relative to <paper num =" N5008" />.
51+ </p >
52+
53+ <blockquote class =" note" >
54+ <p >
55+ [<i >Drafting note</i >: As drive-by fixes the edits for <tt >layout_left_padded<> ::mapping</tt > and
56+ <tt >layout_right_padded<> ::mapping</tt > also correct an editorial asymmetry between class
57+ header synopsis declaration form and prototype specification form of the corresponding
58+ constructors and adjust to the correct formatting of the exposition-only data member <tt ><i >rank_</i ></tt >.]
59+ </p >
60+ </blockquote >
61+
62+ <ol >
63+ <li ><p >Modify <sref ref =" [mdspan.layout.left.overview]" /> as indicated:</p >
64+
65+ <blockquote >
66+ <pre >
67+ namespace std {
68+ template< class Extents>
69+ class layout_left::mapping {
70+ [… ]
71+ <i >// <sref ref =" [mdspan.layout.left.cons]" />, constructors</i >
72+ [… ]
73+ template< class OtherExtents>
74+ constexpr explicit(<del >extents_type::rank() > 0</del ><ins ><i >see below</i ></ins >)
75+ mapping(const layout_stride::mapping< OtherExtents>& );
76+
77+ constexpr mapping& operator=(const mapping& ) noexcept = default;
78+ [… ]
79+ };
80+ }
81+ </pre >
82+ </blockquote >
83+ </li >
84+
85+ <li ><p >Modify <sref ref =" [mdspan.layout.left.cons]" /> as indicated:</p >
86+
87+ <blockquote >
88+ <pre >
89+ template< class OtherExtents>
90+ constexpr explicit(<del >extents_type::rank() > 0</del ><ins ><i >see below</i ></ins >)
91+ mapping(const layout_stride::mapping< OtherExtents>& other);
92+ </pre >
93+ <blockquote >
94+ <p >
95+ -13- <i >Constraints</i >: [… ]
96+ <p />
97+ -14- <i >Preconditions</i >: [… ]
98+ <p />
99+ -15- <i >Effects</i >: [… ]
100+ <p />
101+ <ins >-?- <i >Remarks</i >: The expression inside `explicit` is equivalent to:</ins >
102+ </p >
103+ <blockquote ><pre >
104+ <ins >!(extents_type::rank() == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
105+ </pre ></blockquote >
106+ </blockquote >
107+ </blockquote >
108+ </li >
109+
110+ <li ><p >Modify <sref ref =" [mdspan.layout.right.overview]" /> as indicated:</p >
111+
112+ <blockquote >
113+ <pre >
114+ namespace std {
115+ template< class Extents>
116+ class layout_right::mapping {
117+ [… ]
118+ <i >// <sref ref =" [mdspan.layout.right.cons]" />, constructors</i >
119+ [… ]
120+ template< class OtherExtents>
121+ constexpr explicit(<del >extents_type::rank() > 0</del ><ins ><i >see below</i ></ins >)
122+ mapping(const layout_stride::mapping< OtherExtents>& );
123+
124+ constexpr mapping& operator=(const mapping& ) noexcept = default;
125+ [… ]
126+ };
127+ }
128+ </pre >
129+ </blockquote >
130+ </li >
131+
132+ <li ><p >Modify <sref ref =" [mdspan.layout.right.cons]" /> as indicated:</p >
133+
134+ <blockquote >
135+ <pre >
136+ template< class OtherExtents>
137+ constexpr explicit(<del >extents_type::rank() > 0</del ><ins ><i >see below</i ></ins >)
138+ mapping(const layout_stride::mapping< OtherExtents>& other);
139+ </pre >
140+ <blockquote >
141+ <p >
142+ -13- <i >Constraints</i >: [… ]
143+ <p />
144+ -14- <i >Preconditions</i >: [… ]
145+ <p />
146+ -15- <i >Effects</i >: [… ]
147+ <p />
148+ <ins >-?- <i >Remarks</i >: The expression inside `explicit` is equivalent to:</ins >
149+ </p >
150+ <blockquote ><pre >
151+ <ins >!(extents_type::rank() == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
152+ </pre ></blockquote >
153+ </blockquote >
154+ </blockquote >
155+ </li >
156+
157+ <li ><p >Modify <sref ref =" [mdspan.layout.leftpad.overview]" /> as indicated:</p >
158+
159+ <blockquote >
160+ <pre >
161+ namespace std {
162+ template< size_t PaddingValue>
163+ template< class Extents>
164+ class layout_left_padded< PaddingValue> ::mapping {
165+ [… ]
166+ <i >// <sref ref =" [mdspan.layout.leftpad.cons]" />, constructors</i >
167+ [… ]
168+ template< class OtherExtents>
169+ constexpr explicit(<del >extents_type::rank() > 0</del ><ins ><i >see below</i ></ins >)
170+ mapping(const layout_stride::mapping< OtherExtents>& );
171+ [… ]
172+ };
173+ }
174+ </pre >
175+ </blockquote >
176+ </li >
177+
178+ <li ><p >Modify <sref ref =" [mdspan.layout.leftpad.cons]" /> as indicated:</p >
179+
180+ <blockquote >
181+ <pre >
182+ template< class OtherExtents>
183+ constexpr explicit(<del >rank_ > 0</del ><ins ><i >see below</i ></ins >)
184+ mapping(const layout_stride::mapping< OtherExtents>& other);
185+ </pre >
186+ <blockquote >
187+ <p >
188+ -10- <i >Constraints</i >: [… ]
189+ <p />
190+ -11- <i >Preconditions</i >: [… ]
191+ <p />
192+ -12- <i >Effects</i >: [… ]
193+ <p />
194+ <ins >-?- <i >Remarks</i >: The expression inside `explicit` is equivalent to:</ins >
195+ </p >
196+ <blockquote ><pre >
197+ <ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
198+ </pre ></blockquote >
199+ </blockquote >
200+ </blockquote >
201+ </li >
202+
203+ <li ><p >Modify <sref ref =" [mdspan.layout.rightpad.overview]" /> as indicated:</p >
204+
205+ <blockquote >
206+ <pre >
207+ namespace std {
208+ template< size_t PaddingValue>
209+ template< class Extents>
210+ class layout_right_padded< PaddingValue> ::mapping {
211+ [… ]
212+ <i >// <sref ref =" [mdspan.layout.rightpad.cons]" />, constructors</i >
213+ [… ]
214+ template< class OtherExtents>
215+ constexpr explicit(<del >rank_ > 0</del ><ins ><i >see below</i ></ins >)
216+ mapping(const layout_stride::mapping< OtherExtents>& );
217+ [… ]
218+ };
219+ }
220+ </pre >
221+ </blockquote >
222+ </li >
223+
224+ <li ><p >Modify <sref ref =" [mdspan.layout.rightpad.cons]" /> as indicated:</p >
225+
226+ <blockquote >
227+ <pre >
228+ template< class OtherExtents>
229+ constexpr explicit(<del >rank_ > 0</del ><ins ><i >see below</i ></ins >)
230+ mapping(const layout_stride::mapping< OtherExtents>& other);
231+ </pre >
232+ <blockquote >
233+ <p >
234+ -10- <i >Constraints</i >: [… ]
235+ <p />
236+ -11- <i >Preconditions</i >: [… ]
237+ <p />
238+ -12- <i >Effects</i >: [… ]
239+ <p />
240+ <ins >-?- <i >Remarks</i >: The expression inside `explicit` is equivalent to:</ins >
241+ </p >
242+ <blockquote ><pre >
243+ <ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
244+ </pre ></blockquote >
245+ </blockquote >
246+ </blockquote >
247+ </li >
248+
249+ </ol >
250+ </superseded >
251+
252+ <note >2025-06-20, Luc Grosheintz provides further wording improvements</note >
48253</discussion >
49254
50255<resolution >
@@ -199,6 +404,26 @@ template<class OtherExtents>
199404<ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
200405</pre ></blockquote >
201406</blockquote >
407+ <pre >
408+ template< class LayoutLeftPaddedMapping>
409+ constexpr explicit(<i >see below</i >)
410+ mapping(const LayoutLeftPaddedMapping& other);
411+ </pre >
412+ <blockquote >
413+ <p >
414+ -13- <i >Constraints</i >: [… ]
415+ <p />
416+ [… ]
417+ <p />
418+ -16- <i >Remarks</i >: The expression inside `explicit` is equivalent to:
419+ </p >
420+ <blockquote ><pre >
421+ <ins >!is_convertible_v< typename LayoutLeftPaddedMapping::extents_type, extents_type> && </ins >
422+ rank_> 1 &&
423+ (padding_value != dynamic_extent ||
424+ LayoutLeftPaddedMapping::padding_value == dynamic_extent)
425+ </pre ></blockquote >
426+ </blockquote >
202427</blockquote >
203428</li >
204429
@@ -245,6 +470,26 @@ template<class OtherExtents>
245470<ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
246471</pre ></blockquote >
247472</blockquote >
473+ <pre >
474+ template< class LayoutRightPaddedMapping>
475+ constexpr explicit(<i >see below</i >)
476+ mapping(const LayoutRightPaddedMapping& other);
477+ </pre >
478+ <blockquote >
479+ <p >
480+ -13- <i >Constraints</i >: [… ]
481+ <p />
482+ [… ]
483+ <p />
484+ -17- <i >Remarks</i >: The expression inside `explicit` is equivalent to:
485+ </p >
486+ <blockquote ><pre >
487+ <ins >!is_convertible_v< typename LayoutRightPaddedMapping::extents_type, extents_type> && </ins >
488+ <i >rank_</i > > 1 &&
489+ (padding_value != dynamic_extent ||
490+ LayoutRightPaddedMapping::padding_value == dynamic_extent)
491+ </pre ></blockquote >
492+ </blockquote >
248493</blockquote >
249494</li >
250495
0 commit comments