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])
. explicit raw_storage_iterator(OutputIterator x);
Effects:
Initializes the iterator to point to the same value to which
x points
. raw_storage_iterator& operator*();
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
. OutputIterator base() const;
Returns:
An iterator of type
OutputIterator that points to the same value as
*this points to
.