Ah, now I'm understanding your point better. You're postulating a version
of for_each which requires copy and assign, just for the purpose of exposition.

Got it, thx!

Boost.Range sliced does its slicing by calculating iterator offsets from the
begin and end of its source range, which is why it needs random access iterators.
Its iterator type is also hardwired to be the iterator type of its source range.

Frankly I do wonder at wisdom of some its design decisions.

How is this done by OvenToBoost's dropped and taken adaptors? Can you
point me to the source code?

Thx, Rob.