operator==<small>(std::common_iterator)</small>
| template <class I2, std::sentinel_for<I> S2> requires std::sentinel_for<S, I2> |
(1) | (seit C++20) |
| template <class I2, std::sentinel_for<I> S2> requires std::sentinel_for<S, I2> && std::equality_comparable_with<I, I2> |
(2) | (seit C++20) |
Vergleicht die Iteratoren und/oder Sentinels, die in den zugrunde liegenden std::variant-Member-Objekten var gehalten werden. Zwei inkompatible Iteratoren oder zwei Sentinels gelten als gleich.
Das Verhalten ist undefiniert, wenn entweder x oder y sich in einem ungültigen Zustand befinden, d.h. x.var.valueless_by_exception() || y.var.valueless_by_exception() gleich true ist.
Sei i x.var.index() und j y.var.index().
Der Operator != wird aus operator== synthetisiert.
Diese Funktions-Templates sind für die normale unqualifizierte oder qualifizierte Suche nicht sichtbar und können nur durch Argument-abhängige Suche gefunden werden, wenn std::common_iterator<I> eine assoziierte Klasse der Argumente ist.
Inhalt |
[bearbeiten] Parameter
| x, y | - | Iterator-Adapter zum Vergleichen |
[bearbeiten] Rückgabewert
true, wenn die zugrunde liegenden Iteratoren und/oder Sentinels gleich sind.
[bearbeiten] Beispiel
#include <cassert> #include <iterator> int main() { int a[]{0, 1, 2, 3}; using CI = std::common_iterator< std::counted_iterator<int*>, std::default_sentinel_t >; CI i1{std::counted_iterator{a + 0, 2}}; CI i2{std::counted_iterator{a + 1, 2}}; CI i3{std::counted_iterator{a + 0, 3}}; CI i4{std::counted_iterator{a + 0, 0}}; CI s1{std::default_sentinel}; CI s2{std::default_sentinel}; assert((i1 == i2) == true); assert((i1 == i3) == false); assert((i2 == i3) == false); assert((s1 == s2) == true); assert((i1 == s1) == false); assert((i4 == s1) == true); }
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3574 | C++20 | variant war vollständig constexpr (P2231R1), aber common_iterator nicht |
wurde ebenfalls constexpr gemacht |
[bearbeiten] Siehe auch
| (C++20) |
berechnet die Distanz zwischen zwei Iterator-Adaptoren (Funktions-Template) |