Opened 10 years ago

Closed 9 years ago

Last modified 9 years ago

#6944 closed Bugs (fixed)

Some Range concepts use the incorrect Iterator concept

Reported by: Andrew Morris <andy@…> 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)

range_iter_bug.patch (1.5 KB ) - added by Andrew Morris <andy@…> 10 years ago.
Fix

Download all attachments as: .zip

Change History (7)

by Andrew Morris <andy@…>, 10 years ago

Attachment: range_iter_bug.patch added

Fix

comment:1 by Andrew Morris <andy@…>, 10 years ago

Keywords: range concept iterator added

comment:2 by Nathan Ridge, 9 years ago

(In [84566]) [range] Use correct iterator concepts when checking Boost.Range concepts (refs #6944).

comment:3 by Nathan Ridge, 9 years ago

Owner: changed from Neil Groves to Nathan Ridge
Status: newassigned

Thanks for the report and the patch! Fixed in trunk.

comment:4 by Nathan Ridge, 9 years ago

(In [84643]) [range] Fixed a failing test on gcc 4.2 (refs #6944).

comment:5 by Nathan Ridge, 9 years ago

Resolution: fixed
Status: assignedclosed

(In [84823]) [range] Merge Boost.Range bug fixes to release branch (fixes #6944; fixes #7407; fixes #7408; fixes #7731; fixes #7827; fixes #8338; fixes #8453).

comment:6 by Nathan Ridge, 9 years ago

Fixed for 1.54.

Note: See TracTickets for help on using tickets.