[ 2014-11-11, Jonathan provides improved wording ]
In Urbana LWG decided to explicitly say the value is constructed from an rvalue.
Previous resolution from Jonathan [SUPERSEDED]:
This wording is relative to N3337.
Add a new signature to the synopsis in [storage.iterator] p1:
namespace std { template <class OutputIterator, class T> class raw_storage_iterator : public iterator<output_iterator_tag,void,void,void,void> { public: explicit raw_storage_iterator(OutputIterator x); raw_storage_iterator<OutputIterator,T>& operator*(); raw_storage_iterator<OutputIterator,T>& operator=(const T& element); raw_storage_iterator<OutputIterator,T>& operator=(T&& element); raw_storage_iterator<OutputIterator,T>& operator++(); raw_storage_iterator<OutputIterator,T> operator++(int); }; }Insert the new signature and a new paragraph before p4:
raw_storage_iterator<OutputIterator,T>& operator=(const T& element); raw_storage_iterator<OutputIterator,T>& operator=(T&& element);-?- Requires: For the first signature T shall be CopyConstructible. For the second signature T shall be MoveConstructible.
-4- Effects: Constructs a value from element at the location to which the iterator points.
-5- Returns: A reference to the iterator.