template<class I, class O>
void copy_n(I InIt, size_t n, O OutIt)
{
 while (n--) {
  *OutIt = *InIt;
  ++OutIt;
  ++InIt;
 }
}

一工夫って、単純に上のように書いただけじゃあだめなの?