@@ -45,6 +45,211 @@ specialization of `layout_stride`.
45
45
Set priority to 2 after reflector poll.
46
46
</p >
47
47
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 >
48
253
</discussion >
49
254
50
255
<resolution >
@@ -199,6 +404,26 @@ template<class OtherExtents>
199
404
<ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
200
405
</pre ></blockquote >
201
406
</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 >
202
427
</blockquote >
203
428
</li >
204
429
@@ -245,6 +470,26 @@ template<class OtherExtents>
245
470
<ins >!(<i >rank_</i > == 0 && is_convertible_v< OtherExtents, extents_type> )</ins >
246
471
</pre ></blockquote >
247
472
</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 >
248
493
</blockquote >
249
494
</li >
250
495
0 commit comments