std::ranges::borrowed_range, std::ranges::enable_borrowed_range

来自cppreference.com
< cpp‎ | ranges
定义于头文件 <ranges>
template<class R>

concept borrowed_range =
    ranges::range<R> &&

    (std::is_lvalue_reference_v<R> || ranges::enable_borrowed_range<std::remove_cvref_t<R>>);
(1)
定义于头文件 <ranges>
定义于头文件 <span>
定义于头文件 <string_view>
template<class R>
inline constexpr bool enable_borrowed_range = false;
(2)
1) 概念 borrowed_range 定义范围的要求,使得函数能按值接收它,并返回从它获得的迭代器,而无悬垂之虞。
2) enable_borrowed_range 变量模板用于指示一个 range 是否为 borrowed_range 。初等模板定义为 false
对下列标准模板的所有特化定义为 true 允许对 cv 无限定的程序定义类型特化 enable_borrowed_range

[编辑] 语义要求

给定满足 decltype((e))T 的表达式 eT 实现 borrowed_range 仅若从 e 所代表的对象获得的迭代器的合法性不捆绑到该对象的生存期。

[编辑] 注解

用户可对要实现 borrowed_range 的无 cv 限定的程序定义类型特化 enable_borrowed_rangetrue ,而对不实现的类型特化为 false 。这些特化应当可用于常量表达式并拥有 const bool 类型。