Annex D (normative) Compatibility features [depr]

D.10 Raw storage iterator [depr.storage.iterator]

В шапке есть следующее дополнение:<memory>

namespace std {
  template <class OutputIterator, class T>
  class raw_storage_iterator {
  public:
    using iterator_category = output_iterator_tag;
    using value_type        = void;
    using difference_type   = void;
    using pointer           = void;
    using reference         = void;

    explicit raw_storage_iterator(OutputIterator x);

    raw_storage_iterator& operator*();
    raw_storage_iterator& operator=(const T& element);
    raw_storage_iterator& operator=(T&& element);
    raw_storage_iterator& operator++();
    raw_storage_iterator  operator++(int);
    OutputIterator base() const;
  };
}

raw_­storage_­iterator предоставляется для того, чтобы алгоритмы могли сохранять свои результаты в неинициализированной памяти. Параметр шаблона OutputIterator должен operator* возвращать объект, для которого operator& определен и возвращает указатель T, а также требуется для удовлетворения требований output iterator.

explicit raw_storage_iterator(OutputIterator x);

Effects: Инициализирует итератор так, чтобы он указывал на то же значение, на которое x указывает.

raw_storage_iterator& operator*();

Returns: *this

raw_storage_iterator& operator=(const T& element);

Requires: T будет CopyConstructible.

Effects: Создает значение из element того места, на которое указывает итератор.

Returns: Ссылка на итератор.

raw_storage_iterator& operator=(T&& element);

Requires: T будет MoveConstructible.

Effects: Создает значение из std​::​move(element) того места, на которое указывает итератор.

Returns: Ссылка на итератор.

raw_storage_iterator& operator++();

Effects: Предварительное приращение: продвигает итератор вперед и возвращает ссылку на обновленный итератор.

raw_storage_iterator operator++(int);

Effects: Постинкремент: продвигает итератор вперед и возвращает старое значение итератора.

OutputIterator base() const;

Returns: Итератор типа, OutputIterator который указывает на то же значение, что и *this указывает на.