Skip to content

Latest commit

 

History

History
66 lines (54 loc) · 1.84 KB

File metadata and controls

66 lines (54 loc) · 1.84 KB

size

  • ranges[meta header]
  • std::ranges[meta namespace]
  • iota_view[meta class]
  • function[meta id-type]
  • cpp20[meta cpp]
constexpr auto size() const
  requires (same_as<W, Bound> && advanceable<W>) || (integral<W> && integral<Bound>) || sized_sentinel_for<Bound, W>;
  • integral[link /reference/concepts/same_as.md]
  • advanceable[italic][link iterator.md]
  • sized_sentinel_for[link /reference/iterator/sized_sentinel_for.md]

概要

iota_viewの大きさを取得する。

この関数は、iota_viewsized_rangeのときのみオーバーロード解決に参加する。

効果

if constexpr (is-integer-like<W> && is-integer-like<Bound>)
  return (value_ < 0)
    ? ((bound_ < 0)
      ? to-unsigned-like(-value_) - to-unsigned-like(-bound_)
      : to-unsigned-like(bound_) + to-unsigned-like(-value_))
    : to-unsigned-like(bound_) - to-unsigned-like(value_);
else
  return to-unsigned-like(bound_ - value_);
  • to-unsigned-like[italic]
  • is-integer-like[link /reference/iterator/is_integer_like.md]

to-unsigned-likeは、処理系定義の型(例えば128ビット整数など)も含めて、符号なし整数へ変換する説明専用の関数。

#include <ranges>

int main()
{
  constexpr std::ranges::iota_view iota{0, 5};
  static_assert(iota.size() == 5);
  static_assert(std::same_as<decltype(iota.size()), unsigned int>);
}

出力

バージョン

言語

  • C++20

処理系

参照