// PRE: [b, e) and [o, o+(e-b)) are disjoint // valid ranges // POST: The range [b, e) is copied in reverse // order into the range [o, o+(e-b)) void f (int* b, int* e, int* o) { while (b != e) { --e; *o = *e; ++o; } }