Opened 14 years ago
Closed 12 years ago
#1860 closed Bugs (duplicate)
zip_iterator::value_type should not be reference
| Reported by: | anonymous | Owned by: | Mathias Gaunard |
|---|---|---|---|
| Milestone: | Boost 1.36.0 | Component: | iterator |
| Version: | Boost 1.35.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
hi, defining zip_iterator::value_type in the boost.iterator library to be the same as the reference type breaks some mutating algorithms on zip_iterators. for example sort:
template<class Array1,class Array2>
void array_multisort(Array1& array1, Array2& array2)
{
using namespace boost;
std::sort(make_zip_iterator(make_tuple(array1.begin(), array2.begin())),
make_zip_iterator(make_tuple(array1.end(), array2.end())));
}
won't work as expected. Patching zip_iterator to provide a more natural value_type makes the above code work as intended. The patch is attached to this message.
mfg thomas
Attachments (1)
Change History (5)
by , 14 years ago
| Attachment: | zip_iterator.diff added |
|---|
comment:1 by , 13 years ago
comment:2 by , 13 years ago
Is there any reason not to merge this patch? zip_iterator compiles the above code but produces erroneous output, that's a pretty important bug.
If there is a problem with this patch, please let me know what needs to be improved.
comment:3 by , 13 years ago
| Owner: | changed from to |
|---|
One reason is that I don't have a testcase that is actually reliable. You see, zip_iterator can't be a legit C++03 Forward Iterator, since its reference type is not a real reference. Therefore, the standard library has a right to refuse to compile the example you gave even without the patch. It may work on your installation and legitimately break somewhere else.
So, if you could build a testcase that doesn't rely on strict Forward Iterator conformance, but instead captures the assumptions that your std::sort implementation is making, that make this work, I'd be more than happy to accept the patch as a QOI improvement.
A smaller issue is the definition of iterator_value_type is
redundant with iterator_value in
<boost/iterator/iterator_traits.hpp>
Thanks for your efforts and patience on this one.
comment:4 by , 12 years ago
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |

This looks like a duplicate of #973.