Victor A. Wagner Jr. wrote:
Seems to me that sub_range is a convenience class to describe iterator ranges from ranges or containers that model ForwardRange, from which you can propagate constness.
yup, that's what I thought also
It seems that the problem was caused by the fact that the vc71 generates default operators a bit wierd. The copy-constructor is default generated and so does simply copy the iterators. It seems that the default generated constructor/ assignment for sub_range calls a templated version of iterator_range's construcgtor/ assignment operator I think this might be a bug in the compiler. I've added the following overload sub_range& operator=( sub_range r ) { // // argument passed by value to avoid // const_iterator to iterator conversion // base::operator=( r ); return *this; } and can now compile your program. I've also committed this to the main cvs. -Thorsten