# std::ranges::viewable_range

< cpp‎ | ranges

定义于头文件 `<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++ 标准。

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