Espacios de nombres
Variantes
Acciones

std::ranges::sized_range, std::ranges::disable_sized_range

De cppreference.com
< cpp‎ | ranges
 
 
Biblioteca de rangos
Adaptadores de rangos
 
Definido en el archivo de encabezado <ranges>
template< class T >

concept sized_range = ranges::range<T> &&
  requires(T& t) {
    ranges::size(t);

  };
(1) (desde C++20)
template<class>
inline constexpr bool disable_sized_range = false;
(2) (desde C++20)
1) El concepto sized_range especifica los requerimientos de un tipo range que conoce su tamaño en tiempo constante con la función size.
2) disable_sized_range existe para admitir el uso de tipos rango que proporcionan una función size (ya sea como miembro o como no miembro) pero de hecho no modelan size_range. Los usuarios pueden especializar a disable_sized_range para tipos definidos por programa, no calificados-cv. Dichas especializaciones se podrán utilizar en las expresiones constantes y tendrán el tipo const bool.

[editar] Requerimientos semánticos

1) Dado un l-valor t de tipo std::remove_reference_t<T>, T modela sized_range solo si
  • tiene una complejidad de tiempo constante amortizada,
  • no altera el valor de t de una manera observable en expresiones que conservan la igualdad, y
  • es igual a ranges::distance(ranges::begin(t), ranges::end(t)), y
  • si ranges::iterator_t<T> modela forward_iterator, ranges::size(t) está bien definido independientemente de la evaluación de ranges::begin(t) (en otras palabras, un rango de un solo paso, con tamaño, puede admitir una llamada a size solo antes de que comience la primera llamada, pero un rango de avance debe admitir size en todo momento).

[editar] Notas

disable_sized_range no se puede usar para excluir un rango cuyo iterador y centinela satisfacen sized_sentinel_for; disable_sized_sentinel_for debe usarse en su lugar.

disable_sized_range no se puede especializar para tipos array o tipos referencia.