Espacios de nombres
Variantes
Acciones

std::ranges::viewable_range

De cppreference.com
< cpp‎ | ranges
 
 
Biblioteca de rangos
Adaptadores de rangos
 
Definido en el archivo de encabezado <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>> && !/*es-lista-de-inicializadores*/<T>))));
(desde C++20)

El concepto viewable_range es un refinamiento de range que describe un rango que puede convertirse de manera segura a una vista (view).

La constante /*es-lista-de-inicializadores*/<T> es true si y solo si std::remove_cvref_t<T> es una especialización de std::initializer_list.

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3481 C++20 viewable_range aceptaba un l-valor de una vista de solo-movimiento. Lo rechaza.
P2415R2 C++20 viewable_range solo aceptaba r-valores no-view que fueran borrowed_range. Acepta más tipos.