Spec-Zone.ru › C++

std::weakly_incrementable

Определён в заголовочном файле <iterator>
template< class I >
    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // not required to be equality-preserving
            i++;                         // not required to be equality-preserving
        };
(начиная с C++20)

Определение /*is-signed-integer-like*/ см. в is-integer-like .

Этот концепт задаёт требования к типам, которые можно инкрементировать с помощью операторов префиксного и постфиксного инкремента, однако эти операции инкремента не обязательно сохраняют равенство, а сам тип не обязан быть std::equality_comparable.

Для типов std::weakly_incrementable a == b не подразумевает ++a == ++b. Алгоритмы для слабо инкрементируемых типов должны быть однопроходными. Эти алгоритмы можно использовать с потоками ввода в качестве источника входных данных через std::istream_iterator.

Семантические требования

Для объекта i типа I I моделирует std::weakly_incrementable только в том случае, если выполнены все следующие условия:

  • Выражения ++i и i++ имеют одну и ту же область определения.
  • Если i инкрементируем, то и ++i, и i++ продвигают i.
  • Если i инкрементируем, то std::addressof(++i) == std::addressof(i).

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

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

Отчёт об ошибке Применён к Поведение согласно опубликованной версии Корректное поведение
P2325R3 C++20 Требовался default_initializable не требуется

См. также

incrementable
(C++20)
задаёт, что операция инкремента для типа weakly_incrementable сохраняет равенство, а сам тип является equality_comparable
(концепт)

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

Spec-Zone.ru

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