std::ranges::viewable_range

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



悬垂迭代器处理
范围概念
viewable_range

视图

范围工厂
适配器
范围生成器
范围适配器对象
范围适配器闭包对象
辅助项
 
在标头 <ranges> 定义
template<class T>

concept viewable_range =
  ranges::range<T> &&
  ((ranges::view<std::remove_cvref_t<T>> &&
    std::constructible_from<std::remove_cvref_t<T>, T>) ||
   (!ranges::view<std::remove_cvref_t<T>> &&
    (std::is_lvalue_reference_v<T> ||

     (std::movable<std::remove_reference_t<T>> && !/*is-initializer-list*/<T>))));
(C++20 起)

viewable_range 概念是 range 的细化,它描述能安全转换成 view 的范围。

常量 /*is-initializer-list*/<T>true 当且仅当 std::remove_cvref_t<T>std::initializer_list 的特化。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3481 C++20 viewable_range 曾接受仅移动视图的左值 拒绝
P2415R2 C++20 viewable_range 仅接受作为 borrowed_range 的非 view 右值 接受更多类型