The header <memory> has the following addition:
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 is provided to enable algorithms to store their results into uninitialized memory. The template parameter OutputIterator is required to have its operator* return an object for which operator& is defined and returns a pointer to T, and is also required to satisfy the requirements of an output iterator ([output.iterators]).
Effects: Initializes the iterator to point to the same value to which x points.
raw_storage_iterator& operator*();
Returns: *this
raw_storage_iterator& operator=(const T& element);
Requires: T shall be CopyConstructible.
Effects: Constructs a value from element at the location to which the iterator points.
Returns: A reference to the iterator.
raw_storage_iterator& operator=(T&& element);
Requires: T shall be MoveConstructible.
Effects: Constructs a value from std::move(element) at the location to which the iterator points.
Returns: A reference to the iterator.
raw_storage_iterator& operator++();
Effects: Pre-increment: advances the iterator and returns a reference to the updated iterator.
raw_storage_iterator operator++(int);
Effects: Post-increment: advances the iterator and returns the old value of the iterator.
Returns: An iterator of type OutputIterator that points to the same value as *this points to.