raw_storage_iterator
needs to be a concept-constrained templateSection: 99 [depr.storage.iterator] Status: NAD Concepts Submitter: Alisdair Meredith Opened: 2009-03-11 Last modified: 2017-06-15
Priority: Not Prioritized
View all other issues in [depr.storage.iterator].
View all issues with NAD Concepts status.
Discussion:
Addresses UK 214 [CD1]
raw_storage_iterator
needs constraining as an iterator adaptor to be safely
used in constrained templates
[ Summit: ]
We look forward to a paper on this topic. We recommend no action until a paper is available.
[ Post Summit Alisdair provided wording and rationale. ]
Proposed resolution:
20.2 [memory] p2
Update the synopsis for <memory>
// 20.7.8, raw storage iterator: template <classForwardIterator OutputIterator,classObjectType T> requires OutputIterator< OutIter, T > class raw_storage_iterator; template <ForwardIterator OutIter, ObjectType T> requires OutputIterator< OutIter, T > concept_map Iterator<raw_storage_iterator< OutIter, T > > { }
[storage.iterator] p1
Replace class template definition with:
namespace std { template <classForwardIterator OutputIterator,classObjectType T> requires OutputIterator< OutIter, T > class raw_storage_iterator : public iterator<output_iterator_tag,void,void,void,void> { public: explicit raw_storage_iterator(OutputIteratorx); raw_storage_iterator<OutputIterator,T>& operator*(); raw_storage_iterator<OutputIterator,T>& operator=(const T& element); raw_storage_iterator<OutputIterator,T>& operator++(); raw_storage_iterator<OutputIterator,T>operator++(int); }; template <ForwardIterator OutIter, ObjectType T> requires OutputIterator< OutIter, T > concept_map Iterator<raw_storage_iterator< OutIter, T > > { } }
Rationale:
raw_storage_iterator
has to adapt a ForwardIterator
,
rather than just an InputIterator
for two reasons: