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 <class ForwardIterator OutputIterator, class ObjectType T>
requires OutputIterator< OutIter, 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++();
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: