mirror of
https://github.com/boostorg/iterator.git
synced 2025-05-11 13:33:56 +00:00
fixed bug in inherit-category that Thomas found
[SVN r20160]
This commit is contained in:
parent
ac0c6461fb
commit
30ca43dd08
@ -819,7 +819,9 @@ enum iterator_access { readable_iterator = 1, writable_iterator = 2,
|
||||
|
||||
template <unsigned int access_bits, class TraversalTag>
|
||||
struct iterator_tag : /* appropriate old category or categories */ {
|
||||
static const iterator_access access = (iterator_access)access_bits;
|
||||
static const iterator_access access =
|
||||
(iterator_access)access_bits &
|
||||
(readable_iterator | writable_iterator | swappable_iterator);
|
||||
typedef TraversalTag traversal;
|
||||
};
|
||||
|
||||
@ -842,7 +844,7 @@ from one of the original iterator tags according to the following
|
||||
pseudo-code.</p>
|
||||
<pre class="literal-block">
|
||||
inherit-category(access, traversal-tag) =
|
||||
if (access & lvalue_iterator) {
|
||||
if ((access & readable_iterator) && (access & lvalue_iterator)) {
|
||||
if (traversal-tag is convertible to random_access_traversal_tag)
|
||||
return random_access_iterator_tag;
|
||||
else if (traversal-tag is convertible to bidirectional_traversal_tag)
|
||||
@ -885,7 +887,7 @@ deduced. The following pseudo-code describes the algorithm.</p>
|
||||
is-readable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % readable_iterator;
|
||||
return Access & readable_iterator;
|
||||
else if (cat is convertible to input_iterator_tag)
|
||||
return true;
|
||||
else
|
||||
@ -894,7 +896,7 @@ is-readable(Iterator) =
|
||||
is-writable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % writable_iterator;
|
||||
return Access & writable_iterator;
|
||||
else if (cat is convertible to forward_iterator_tag
|
||||
or output_iterator_tag)
|
||||
return true;
|
||||
@ -904,7 +906,7 @@ is-writable(Iterator) =
|
||||
is-swappable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % swappable_iterator;
|
||||
return Access & swappable_iterator;
|
||||
else if (cat is convertible to forward_iterator_tag) {
|
||||
if (iterator_traits<Iterator>::reference is a const reference)
|
||||
return false;
|
||||
|
@ -658,7 +658,9 @@ Addition to [lib.iterator.synopsis]
|
||||
|
||||
template <unsigned int access_bits, class TraversalTag>
|
||||
struct iterator_tag : /* appropriate old category or categories */ {
|
||||
static const iterator_access access = (iterator_access)access_bits;
|
||||
static const iterator_access access =
|
||||
(iterator_access)access_bits &
|
||||
(readable_iterator | writable_iterator | swappable_iterator);
|
||||
typedef TraversalTag traversal;
|
||||
};
|
||||
|
||||
@ -683,7 +685,7 @@ pseudo-code.
|
||||
::
|
||||
|
||||
inherit-category(access, traversal-tag) =
|
||||
if (access & lvalue_iterator) {
|
||||
if ((access & readable_iterator) && (access & lvalue_iterator)) {
|
||||
if (traversal-tag is convertible to random_access_traversal_tag)
|
||||
return random_access_iterator_tag;
|
||||
else if (traversal-tag is convertible to bidirectional_traversal_tag)
|
||||
@ -729,7 +731,7 @@ deduced. The following pseudo-code describes the algorithm.
|
||||
is-readable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % readable_iterator;
|
||||
return Access & readable_iterator;
|
||||
else if (cat is convertible to input_iterator_tag)
|
||||
return true;
|
||||
else
|
||||
@ -738,7 +740,7 @@ deduced. The following pseudo-code describes the algorithm.
|
||||
is-writable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % writable_iterator;
|
||||
return Access & writable_iterator;
|
||||
else if (cat is convertible to forward_iterator_tag
|
||||
or output_iterator_tag)
|
||||
return true;
|
||||
@ -748,7 +750,7 @@ deduced. The following pseudo-code describes the algorithm.
|
||||
is-swappable(Iterator) =
|
||||
cat = iterator_traits<Iterator>::iterator_category;
|
||||
if (cat == iterator_tag<Access,Traversal>)
|
||||
return Access % swappable_iterator;
|
||||
return Access & swappable_iterator;
|
||||
else if (cat is convertible to forward_iterator_tag) {
|
||||
if (iterator_traits<Iterator>::reference is a const reference)
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user