#6944 closed Bugs (fixed)
Some Range concepts use the incorrect Iterator concept
| Reported by: | Owned by: | Nathan Ridge | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | range |
| Version: | Boost 1.49.0 | Severity: | Problem |
| Keywords: | range concept iterator | Cc: |
Description
Due to an omitted namespace specification, the BidirectionalRangeConcept and RandomAccessRangeConcept inside <boost\range\concepts.hpp> use the STL iterator concept checking classes in <boost\concept_check.hpp> instead of the appropriate concepts inside the same file.
This issue was actually noticed in ticket #4355, but a different fix was applied.
The reason that the Range concepts should not use the STL iterator concepts is because the Range concepts only require the relevant traversal concept. (Source)
This example fails on Cygwin g++4.7 and VC2010
#include <boost/concept_check.hpp>
#include <boost/iterator/iterator_adaptor.hpp>
#include <boost/range/concepts.hpp>
#include <boost/range/iterator_range.hpp>
#include <vector>
typedef std::vector<int>::iterator iter_base;
struct iter : boost::iterator_adaptor<iter, iter_base, int, boost::use_default, int> {}; // will be deduced as random-access traversal but input category
typedef boost::iterator_range<iter> iter_range;
BOOST_CONCEPT_ASSERT(( boost::RandomAccessRangeConcept<iter_range> ));
I've attached a patch for this issue.
Attachments (1)
Change History (7)
by , 10 years ago
| Attachment: | range_iter_bug.patch added |
|---|
comment:1 by , 10 years ago
| Keywords: | range concept iterator added |
|---|
comment:2 by , 9 years ago
comment:3 by , 9 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
Thanks for the report and the patch! Fixed in trunk.
comment:5 by , 9 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |

Fix