std::common_iterator<I,S>:: operator*,->
|
constexpr
decltype
(
auto
)
operator
*
(
)
;
|
(1) | (начиная с C++20) |
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
requires /*dereferenceable*/ < const I > ; |
(2) | (начиная с C++20) |
|
constexpr
auto
operator
-
>
(
)
const
requires /* см. описание */ ; |
(3) | (начиная с C++20) |
|
Вспомогательные типы
|
||
|
class
/*proxy*/
{
std::
iter_value_t
<
I
>
keep_
;
|
(4) | ( только для демонстрации* ) |
Возвращает указатель или ссылку на текущий элемент, или прокси-объект, содержащий его.
Поведение не определено, если базовый объект
std::variant
член
var
не содержит объект типа
I
, т.е.
std::
holds_alternative
<
I
>
(
var
)
равно
false
.
Пусть
it
обозначает итератор типа
I
, хранящийся в
var
, то есть
std
::
get
<
I
>
(
var
)
.
it
.
-
Эквивалентно
return
it
;
, если
Iявляется типом указателя или если выражение it. operator - > ( ) корректно сформировано. - Иначе, эквивалентно auto && tmp = * it ; return std:: addressof ( tmp ) ; , если std:: iter_reference_t < I > является ссылочным типом.
-
Иначе, эквивалентно
return
proxy
(
*
it
)
;
, где
proxyявляется классом только для экспозиции (4) .
requires
-клаузе эквивалентно
std:: indirectly_readable < const I > && (
требует
(
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
>>
Содержание |
Параметры
(нет)
Возвращаемое значение
Пример
#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'; }
Вывод:
(3.14,2) 3.14
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Исправленное поведение |
|---|---|---|---|
| LWG 3574 | C++20 |
variant
был полностью constexpr (P2231R1), но
common_iterator
не был
|
также сделан constexpr |
| LWG 3595 | C++20 | функции прокси-типа не имели constexpr и noexcept | добавлены |
| LWG 3672 | C++20 |
operator->
мог возвращать по ссылке в обычных случаях
|
всегда возвращает по значению |
Смотрите также
создает новый
common_iterator
(публичная функция-член) |