std::ranges::borrowed_iterator_t, std::ranges::borrowed_subrange_t

来自cppreference.com
< cpp‎ | ranges
 
 
范围库
范围访问
范围转换器
(C++23)
范围原语



悬垂迭代器处理
borrowed_iterator_t
  
borrowed_subrange_t
  
范围概念
视图

范围工厂
适配器
范围生成器
范围适配器对象
范围适配器闭包对象
辅助项
 
在标头 <ranges> 定义
template< ranges::range R >
using borrowed_iterator_t = /* see below */;
(1) (C++20 起)
template< ranges::range R >
using borrowed_subrange_t = /* see below */;
(2) (C++20 起)
1)R 实现 borrowed_range 则为 std::ranges::iterator_t<R> ,否则为 std::ranges::dangling
2)R 实现 borrowed_range 则为 std::ranges::subrange<std::ranges::iterator_t<R>> ,否则为 std::ranges::dangling

某些受约束算法用此二模板别名避免返回潜在悬垂的迭代器或视图。

可能的实现

版本一
template< std::ranges::range R >
using borrowed_iterator_t = std::conditional_t<std::ranges::borrowed_range<R>,
    std::ranges::iterator_t<R>, std::ranges::dangling>;
版本二
template< std::ranges::range R >
using borrowed_subrange_t = std::conditional_t<std::ranges::borrowed_range<R>,
    std::ranges::subrange<std::ranges::iterator_t<R>>, std::ranges::dangling>;

参阅

占位类型,指示不应返回迭代器或子范围,因为它可能悬垂
(类)