最終更新日時(UTC): 2025年07月08日 15時33分39秒
Akira Takahashi が更新

履歴 編集

type-alias
<ranges>

# std::ranges::const_sentinel_t(C++23)

    namespace std::ranges {
      template<range R>
      using const_sentinel_t = decltype(ranges::cend(declval<R&>()));
    }

## 概要

任意のRange型`R`の定数イテレータ（`const_iterator_t<R>`）に対応する番兵の型を取得する。

## 例

    #include <ranges>
    #include <vector>

    int main() {
      static_assert(std::same_as<std::ranges::const_sentinel_t<      std::vector<int>>, std::basic_const_iterator<std::vector<int>::iterator>>);
      static_assert(std::same_as<std::ranges::const_sentinel_t<const std::vector<int>>, std::vector<int>::const_iterator>);

      static_assert(std::same_as<std::ranges::const_sentinel_t<std::ranges::repeat_view<int>>, std::unreachable_sentinel_t>);
    }

### 出力

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: 13.1 ✅
- Visual C++: 2022 Update 6 ✅

## 参照

- P2278R4 `cbegin` should always return a constant iterator
- LWG Issue 3946. The definition of `const_iterator_t` should be reworked