std::ranges::borrowed_range, std::ranges::enable_borrowed_range
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <ranges>
|
||
template<typename R> concept borrowed_range = ranges::range<R> && (std::is_lvalue_reference_v<R> || ranges::enable_borrowed_range<std::remove_cvref_t<R>>); |
(1) | |
| Definido en el archivo de encabezado <ranges>
|
||
| Definido en el archivo de encabezado <span>
|
||
| Definido en el archivo de encabezado <string_view>
|
||
template<typename R> inline constexpr bool enable_borrowed_range = false; |
(2) | |
1) El concepto
borrowed_range (rango "prestado") define los requerimientos de un rango tal que una función lo puede tomar por valor y devolver iteradores obtenidos de él sin peligro de que queden pendientes.2) La plantilla de variable
Especializaciones para todas las especializaciones de las siguientes plantillas estándar se definen como
enable_borrowed_range se usa para indicar si un rango (range) es un borrowed_range. La plantilla primaria se define como false.Especializaciones para todas las especializaciones de las siguientes plantillas estándar se definen como
true:
- std::basic_string_view
- std::span
- std::ranges::subrange
- std::ranges::ref_view
- std::ranges::empty_view
- std::ranges::iota_view
Se permite que enable_borrowed_range se especialice para tipos sin calificación-cv definidos por el programa.
Requerimientos semánticos
Dada una expresión e tal que decltype((e)) es T, T modela borrowed_range solamente si la validez de los iteradores obtenidos del objeto denotado por e no está atada a la duración de ese objeto.
Notas
Los usuarios pueden especializar enable_borrowed_range a true para tipos sin calificación-cv definidos por el programa que modelan borrowed_range, y false para tipos que no. Tales especializaciones deberán ser utilizables en las expresiones constantes y tener tipo const bool.