Spec-Zone.ru › C++

std::indirectly_writable

Определено в заголовке <iterator>
template< class Out, class T >
    concept indirectly_writable =
        requires(Out&& o, T&& t) {
            *o = std::forward<T>(t);
            *std::forward<Out>(o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*std::forward<Out>(o)) =
                std::forward<T>(t);
        };
        /* none of the four expressions above are required to be equality-preserving */
(с C++20)

Концепция indirectly_writable<Out, T> определяет требования к записи значения, тип и категория значения которого закодированы T в объект, на который ссылается итератор Out.

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

Пусть e — выражение, такое что decltype((e)) является T, и o — доступный к разыменованию объект типа Out, тогда indirectly_writable<Out, T> моделируется только в том случае, если:

  • Если std::indirectly_readable<Out> моделируется и std::iter_value_t<Out> — тот же тип, что и std::decay_t<T>, то значение *o после любого из вышеуказанных присваиваний равно значению e до присваивания.

Не требуется, чтобы o был доступен к разыменованию после вычисления любого из вышеуказанных выражений присваивания. Если e — выражение типа xvalue, то результирующее состояние объекта, который оно обозначает, является допустимым, но не определённым.

Сохранение равенства

Выражения, объявленные в выражениях requires стандартных концепций библиотеки, должны быть сохраняющими равенство (кроме случаев, когда указано иное).

Примечания

Единственное допустимое использование operator* — в левой части выражения присваивания. Присваивание через то же значение типа, допускающего косвенную запись, может произойти только один раз.

Требуемые выражения с const_cast предотвращают, чтобы объекты indirectly_readable с типами reference prvalue случайно удовлетворяли синтаксическим требованиям indirectly_writable , одновременно позволяя ссылкам-прокси продолжать работать, если их константность является поверхностной. См. проблему 381 Ranges TS.

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

Spec-Zone.ru

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