
John Maddock wrote:
There seems to be a bug in the string algorithm library that results in a valid container iterator being compared to a "singular" default constructed iterator: this operation is not supported by the iterator requirements
I'm not sure if I understand correctly what you mean, but the default constructed iterator is inteded to represent the past-the-end value.
And the actual problem I think is caused by (iter_find.hpp#98):
transform_iter_type itBegin=
make_transform_iterator(
find_iterator_type( begin(Input), InputEnd, Finder ),
copy_range_type());
transform_iter_type itEnd=
make_transform_iterator(
find_iterator_type(), // end iterator is default constructed here!!
copy_range_type());
SequenceSequenceT Tmp(itBegin, itEnd); // assertion here
I didn't find out yet what it is (it takes some time to get STLPort running...), but it works for c strings and crashes for std::string (see the first two calls of the library in the split testcase). These and other lines were changed a few days ago to fix a bug that we found on default constructed iterators for c strings. Now it seems there are also troubles with std::strings... The problem is that Pavol left for vacation.
There may be other occurances of course,
Yes, one a few lines below (iter_split) but not more. Stefan