最終更新日時:
が更新

履歴 編集

function template
<mdspan>

canonical-range-slice(C++26)

template<class IndexType,
         class OffsetType,
         class SpanType,
         class... StrideTypes>
constexpr auto
  canonical-range-slice(OffsetType offset,
                        SpanType span,
                        StrideTypes... strides);

概要

canonical-range-sliceは、submdspan動作仕様定義で用いられる説明専用の関数テンプレートである。

取り出し元の要素数spanとストライド幅strides...から、取り出す要素数を求めてextent_sliceを構築する。

説明用の型StrideType、値strideextent-valueextentを次の通り定義する。

  • StrideType : StrideTypesが空のパックであるか、SpanTypeconstant_wrapper<IndexType(0)>であるときconstant_wrapper<IndexType(1)>、そうでなければStrideTypes...[0]
  • stride : StrideTypeconstant_wrapperの特殊化であるときStrideType()、そうでなければspan == 0trueのときIndexType(1)、そうでなければstrides...[0]
  • extent-value : span != 0trueのとき1 + (span - 1) / stride、そうでなければ0
  • extent : SpanTypeStrideTypeがいずれもconstant_wrapperの特殊化であるときcw<IndexType(extent-value)>、そうでなければIndexType(extent-value)

適格要件

sizeof...(StrideTypes) <= 1trueであり、StrideTypeconstant_wrapperの特殊化であるときStrideType::value > 0trueであること。

事前条件

stride > 0trueであること。

戻り値

extent_slice{.offset = offset, .extent = extent, .stride = stride}

バージョン

言語

  • C++26

関連項目

参照