Espacios de nombres
Variantes

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

De cppreference.com
 
 
Biblioteca de rangos
Adaptadores de rangos
 
<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 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:

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.