@@ -20,13 +20,18 @@ template<class OtherExtents>
2020constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
2121 mapping(const layout_left::mapping<OtherExtents >& other) noexcept; // (5)
2222
23+ template<class LayoutRightPaddedMapping >
24+ constexpr explicit(!is_convertible_v<typename LayoutRightPaddedMapping::extents_type, extents_type>)
25+ mapping(const LayoutRightPaddedMapping&) noexcept; // (7) C++26
26+
2327template<class OtherExtents >
2428constexpr explicit(extents_type::rank() > 0)
2529 mapping(const layout_stride::mapping<OtherExtents >& other) noexcept; // (6)
2630```
2731* is_convertible_v[link /reference/type_traits/is_convertible.md]
2832* rank()[link ../../extents/rank.md]
2933* layout_left::mapping[link ../../layout_left/mapping.md]
34+ * LayoutRightPaddedMapping[link ../../layout_right_padded/mapping.md]
3035* layout_stride::mapping[link ../../layout_stride/mapping.md]
3136
3237## 概要
@@ -36,6 +41,7 @@ constexpr explicit(extents_type::rank() > 0)
3641- (4) : 他`layout_right::mapping`からの変換コンストラクタ
3742- (5) : [`layout_left::mapping`](../../layout_left/mapping.md)からの変換コンストラクタ
3843- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
44+ - (7) : [`layout_right_padded<S>::mapping`](../../layout_right_padded/mapping.md)からの変換コンストラクタ
3945
4046
4147## テンプレートパラメータ制約
@@ -44,6 +50,16 @@ constexpr explicit(extents_type::rank() > 0)
4450 - `extents_type::`[`rank()`](../../extents/rank.md) `<= 1`、かつ
4551 - [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
4652- (6) : [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
53+ - (7) :
54+ - [`is-layout-right-padded-mapping-of`](../../is-layout-right-padded-mapping-of.md)`<LayoutRightPaddedMapping>`が`true`、かつ
55+ - [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, typename LayoutRightPaddedMapping::extents_type>`が`true`であること。
56+
57+
58+ ## 適格要件
59+ - (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(`[`Extents::rank()`](../../extents/rank.md) `- 1)`が[`LayoutRightPaddedMapping::static-padding-stride`](../../layout_right_padded/mapping.md)に等しいこと。
60+ - `extents_type::`[`rank()`](../../extents/rank.md) `> 1`、かつ
61+ - `extents_type::`[`static_extent`](../../extents/static_extent.md)`(Extents::rank() - 1)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
62+ - `LayoutRightPaddedMapping::static-padding-stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないとき。
4763
4864
4965## 事前条件
@@ -53,11 +69,14 @@ constexpr explicit(extents_type::rank() > 0)
5369- (6) :
5470 - `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_right::mapping`相当の制約](stride.md)をもつこと。
5571 - `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
72+ - (7) :
73+ - `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(extents_type::rank() - 2) == other.extents().extent(extents_type::rank() - 1)`
74+ - `other.`[`required_span_size()`](../../layout_right_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
5675
5776
5877## 効果
5978- (3) : `e`を用いて`extents_`を直接非リスト初期化する。
60- - (4), (5), (6) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
79+ - (4), (5), (6), (7) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
6180
6281
6382## 例外
@@ -67,6 +86,7 @@ constexpr explicit(extents_type::rank() > 0)
6786## explicitになる条件
6887- (4), (5) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<OtherExtents, extents_type>`
6988- (6) : [`extents_type::rank()`](../../extents/rank.md) `> 0`
89+ - (7) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<typename LayoutRightPaddedMapping::extents_type, extents_type>`
7090
7191
7292## 例
@@ -143,7 +163,9 @@ int main()
143163## 関連項目
144164- [ ` layout_left::mapping ` ] ( ../../layout_left/mapping.md )
145165- [ ` layout_stride::mapping ` ] ( ../../layout_stride/mapping.md )
166+ - [ ` layout_right_padded::mapping ` ] ( ../../layout_right_padded/mapping.md )
146167
147168
148169## 参照
149170- [ P0009R18 MDSPAN] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html )
171+ - [ P2642R6 Padded mdspan layouts] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf )
0 commit comments