std::common_iterator<I,S>:: operator*,->
|
constexpr
decltype
(
auto
)
operator
*
(
)
;
|
(1) | (depuis C++20) |
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
requires /*dereferenceable*/ < const I > ; |
(2) | (depuis C++20) |
|
constexpr
auto
operator
-
>
(
)
const
requires /* voir description */ ; |
(3) | (depuis C++20) |
|
Types auxiliaires
|
||
|
class
/*proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(4) | ( exposition uniquement* ) |
Retourne un pointeur ou une référence vers l'élément actuel, ou un proxy le contenant.
Le comportement n'est pas défini si l'objet membre sous-jacent
std::variant
var
ne contient pas un objet de type
I
, c'est-à-dire si
std::
holds_alternative
<
I
>
(
var
)
est égal à
false
.
Soit
it
l'itérateur de type
I
détenu par
var
, c'est-à-dire
std
::
get
<
I
>
(
var
)
.
it
.
-
Équivalent à
return
it
;
, si
Iest un type pointeur ou si l'expression it. operator - > ( ) est bien formée. - Sinon, équivalent à auto && tmp = * it ; return std:: addressof ( tmp ) ; , si std:: iter_reference_t < I > est un type référence.
-
Sinon, équivalent à
return
proxy
(
*
it
)
;
, où
proxyest une classe d'exposition uniquement (4) .
requires
-clause est équivalente à
std:: indirectly_readable < const I > && (
requires
(
const
I
&
i
)
{
i.
operator
-
>
(
)
;
}
||
std::
is_reference_v
<
std::
iter_reference_t
<
I
>>
||
std::
constructible_from
<
std::
iter_value_t
<
I
>
,
std::
iter_reference_t
<
I
>>
Table des matières |
Paramètres
(aucun)
Valeur de retour
Exemple
#include <complex> #include <initializer_list> #include <iostream> #include <iterator> using std::complex_literals::operator""i; int main() { const auto il = {1i, 3.14 + 2i, 3i, 4i, 5i}; using CI = std::common_iterator< std::counted_iterator<decltype(il)::iterator>, std::default_sentinel_t>; CI ci{std::counted_iterator{std::next(begin(il), 1), std::ssize(il) - 1}}; std::cout << *ci << ' ' << ci->real() << '\n'; }
Sortie :
(3.14,2) 3.14
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3574 | C++20 |
variant
était entièrement constexpr (P2231R1) mais
common_iterator
ne l'était pas
|
également rendu constexpr |
| LWG 3595 | C++20 | les fonctions du type proxy manquaient de constexpr et noexcept | ajoutés |
| LWG 3672 | C++20 |
operator->
pouvait retourner par référence dans les cas usuels
|
retourne toujours par valeur |
Voir aussi
construit un nouveau
common_iterator
(fonction membre publique) |