std:: projected
|
Défini dans l'en-tête
<iterator>
|
||
| (1) | ||
|
template
<
std::
indirectly_readable
I,
std::
indirectly_regular_unary_invocable
<
I
>
Proj
>
|
(depuis C++20)
(jusqu'à C++26) |
|
|
template
<
std::
indirectly_readable
I,
std::
indirectly_regular_unary_invocable
<
I
>
Proj
>
|
(depuis C++26) | |
|
template
<
std::
weakly_incrementable
I,
class
Proj
>
struct
incrementable_traits
<
std
::
projected
<
I, Proj
>>
|
(2) |
(depuis C++20)
(jusqu'à C++26) |
|
Modèles auxiliaires
|
||
|
template
<
class
I,
class
Proj
>
struct
/*projected-impl*/
|
(3) |
(depuis C++26)
( exposition uniquement* ) |
projected
combine un type
indirectly_readable
I
et un type d'objet appelable
Proj
en un nouveau type
indirectly_readable
dont le type de référence est le résultat de l'application de
Proj
au
std::
iter_reference_t
<
I
>
.
weakly_incrementable
lorsque
I
est également un type
weakly_incrementable
.
difference_type
existe uniquement si
I
modélise
weakly_incrementable
.
projected
est utilisé uniquement pour contraindre les algorithmes qui acceptent des objets appelables et des projections, et donc son
operator
*
(
)
n'est pas défini.
Table des matières |
Paramètres du modèle
| I | - | un type indirectement lisible |
| Proj | - |
projection appliquée à un déréférencé
I
|
Notes
La couche indirecte empêche
I
et
Proj
d'être des classes associées de
projected
. Lorsqu'une classe associée de
I
ou
Proj
est un type de classe incomplet, la couche indirecte évite la tentative inutile d'inspecter la définition de ce type qui entraînerait une erreur irrécupérable.
Exemple
#include <algorithm> #include <cassert> #include <functional> #include <iterator> template<class T> struct Holder { T t; }; struct Incomplete; using P = Holder<Incomplete>*; static_assert(std::equality_comparable<P>); // OK static_assert(std::indirectly_comparable<P*, P*, std::equal_to<>>); // Erreur avant C++26 static_assert(std::sortable<P*>); // Erreur avant C++26 int main() { P a[10] = {}; // dix pointeurs nuls assert(std::count(a, a + 10, nullptr) == 10); // OK assert(std::ranges::count(a, a + 10, nullptr) == 10); // Erreur avant C++26 }
Voir aussi
|
(C++26)
|
calcule le type de valeur d'un
indirectly_readable
par projection
(alias de modèle) |