std::ranges:: sized_range, std::ranges:: disable_sized_range
|
Défini dans l'en-tête
<ranges>
|
||
| (1) | ||
|
template
<
class
T
>
concept sized_range
=
ranges::
range
<
T
>
&&
|
(depuis C++20)
(jusqu'à C++26) |
|
|
template
<
class
T
>
concept sized_range
=
ranges
::
approximately_sized_range
<
T
>
&&
|
(depuis C++26) | |
|
template
<
class
>
constexpr bool disable_sized_range = false ; |
(2) | (depuis C++20) |
sized_range
spécifie les exigences d'un type de
range
(jusqu'en C++26)
approximately_sized_range
(depuis C++26)
qui connaît sa taille en temps constant avec la fonction
size
.
disable_sized_range
existe pour permettre l'utilisation de types de plages qui fournissent une fonction
size
(soit en tant que membre, soit en tant que non-membre) mais qui ne modélisent pas en réalité
sized_range
. Les utilisateurs peuvent spécialiser
disable_sized_range
pour les types définis par le programme sans qualificatifs cv. De telles spécialisations doivent être utilisables dans les
expressions constantes
et avoir le type
const
bool
.
Table des matières |
Exigences sémantiques
T
modélise
sized_range
seulement si
- ranges:: size ( t )
-
- a une complexité amortie constante,
- ne modifie pas la valeur de t d'une manière observable par les expressions préservant l'égalité , et
- est égal à ranges:: distance ( ranges:: begin ( t ) , ranges:: end ( t ) ) , et
-
si
ranges::
iterator_t
<
T
>
modélise
forward_iterator, ranges:: size ( t ) est bien défini indépendamment de l'évaluation de ranges:: begin ( t ) (en d'autres termes, un sized_range à passage unique peut supporter un appel à size seulement avant le premier appel à begin, mais un forward_range doit supporter size à tout moment).
Notes
disable_sized_range
ne peut pas être utilisé pour désactiver la taille d'un intervalle dont l'itérateur et le sentinelle satisfont
sized_sentinel_for
;
std::disable_sized_sentinel_for
doit être utilisé à la place.
disable_sized_range
ne peut pas être spécialisé pour les types tableau ou les types référence.
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) | ranges::approximately_sized_range et ranges::reserve_hint |
Exemple
#include <forward_list> #include <list> #include <ranges> static_assert ( std::ranges::sized_range<std::list<int>> and not std::ranges::sized_range<std::forward_list<int>> ); int main() {}
Voir aussi
|
(C++20)
|
spécifie une gamme dont le type d'itérateur satisfait
random_access_iterator
(concept) |
|
(C++20)
|
spécifie une gamme dont le type d'itérateur satisfait
contiguous_iterator
(concept) |