Spec-Zone.ru › C++

std::basic_const_iterator<Iter>::operator константный итератор

template< /*not-a-const-iterator*/ CI >
  requires /*constant-iterator*/<CI> && 
      std::convertible_to<Iter const&, CI>
constexpr operator CI() const &;
(1) (начиная с C++23)
template< /*not-a-const-iterator*/ CI >
  requires /*constant-iterator*/<CI> && 
      std::convertible_to<Iter, CI>
constexpr operator CI() &&;
(2) (начиная с C++23)

Возвращает преобразованный константный итератор, в который базовый итератор current может быть преобразован явно или неявно.

CI удовлетворяет концепции, используемой только для описания, /*not-a-const-iterator*/ тогда и только тогда, когда он не является специализацией basic_const_iterator.

Возвращаемое значение

1) current
2) std::move(current)

Пример

#include <iterator>
#include <ranges>
#include <vector>

void foo(std::vector<int>::const_iterator) {}

int main()
{
    auto v = std::vector<int>();
    {
        // ranges::cbegin below returns vector<int>::const_iterator
        auto i1 = std::ranges::cbegin(v);
        foo(i1); // okay
    }

    auto t = v | std::views::take_while([](int const x) { return x < 100; });
    {
        // ranges::cbegin below returns basic_const_iterator<vector<int>::iterator>
        auto i2 = std::ranges::cbegin(t);
        foo(i2); // error until P2836R1
    }
}

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

DR Применяется к Опубликованное поведение Правильное поведение
P2836R1 C++23 basic_const_iterator не следует правилам преобразуемости своего базового типа предоставлен оператор преобразования

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/basic_const_iterator/operator_constant_iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API